/*
 * Auto generated C++ header for Mass Effect 2.
 *	by _silencer.
 */

#ifndef UNREAL_SDK_GAME_SFXGame_H
#define UNREAL_SDK_GAME_SFXGame_H

#include "unreal_game_global.h"

namespace game
{
	using namespace unreal;

	class Bio_Appr_Character_Base_Settings: public Component
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_Base_Settings, Component, SFXGame )

	public:

		Bool m_bIsShowingMissingResources: 1; //offset = 72, size = 4
	};

	class Bio_Appr_Character_Body_Settings: public Bio_Appr_Character_Base_Settings
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_Body_Settings, Bio_Appr_Character_Base_Settings, SFXGame )

	public:

		Bio_Appr_Character_HeadGear_Settings* m_oHeadGearSettings; //offset = 76, size = 4
		Byte m_eArmorType; //offset = 80, size = 1
		Byte m_eVisualOverride; //offset = 81, size = 1
		Int m_nModelVariant; //offset = 84, size = 4
		Int m_nMaterialConfig; //offset = 88, size = 4
		Bool m_bIsHeadGearLoaded: 1; //offset = 92, size = 4
		Bool m_bIsHeadGearHidden: 1; //offset = 92, size = 4
	};

	class Bio_Appr_Character_Hair_Settings: public Bio_Appr_Character_Base_Settings
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_Hair_Settings, Bio_Appr_Character_Base_Settings, SFXGame )

	public:

		Int m_nMaterial; //offset = 76, size = 4
	};

	class Bio_Appr_Character_Head_Settings: public Bio_Appr_Character_Base_Settings
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_Head_Settings, Bio_Appr_Character_Base_Settings, SFXGame )

	public:

		Int m_nMaterialConfig; //offset = 76, size = 4
		Int m_nHairAppearance; //offset = 80, size = 4
		Bio_Appr_Character_Hair_Settings* m_oHairSettings; //offset = 84, size = 4
	};

	struct BioHeadGearComponentSettings
	{
		Int m_nMeshIndex; //offset = 0, size = 4
		Int m_nMaterialIndex; //offset = 4, size = 4
		Bool m_bUseBodyMaterialConfig: 1; //offset = 8, size = 4
		Bool m_bIsHidden: 1; //offset = 8, size = 4
		Bool m_bIsLoaded: 1; //offset = 8, size = 4
	};

	class Bio_Appr_Character_HeadGear_Settings: public Bio_Appr_Character_Base_Settings
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_HeadGear_Settings, Bio_Appr_Character_Base_Settings, SFXGame )

	public:

		Int m_nModelSpec; //offset = 76, size = 4
		Int m_nMaterialConfig; //offset = 80, size = 4
		Bool m_bUseBodyMaterialConfig: 1; //offset = 84, size = 4
		BioHeadGearComponentSettings m_visor; //offset = 88, size = 12
		BioHeadGearComponentSettings m_facePlate; //offset = 100, size = 12
		Byte m_eVisualOverride; //offset = 112, size = 1
	};

	class Bio_Appr_Character_Settings: public Bio_Appr_Character_Base_Settings
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_Settings, Bio_Appr_Character_Base_Settings, SFXGame )

	public:

		Bio_Appr_Character_Body_Settings* m_oBodySettings; //offset = 76, size = 4
		Int m_nHeadAppearance; //offset = 80, size = 4
		Bool m_bIsHeadHidden: 1; //offset = 84, size = 4
		Bool m_bIsHeadLoaded: 1; //offset = 84, size = 4
		Bio_Appr_Character_Head_Settings* m_oHeadSettings; //offset = 88, size = 4
	};

	class SFXActorFactoryRigidBody: public ActorFactoryRigidBody
	{
		DECLARE_PACKAGE_CLASS( SFXActorFactoryRigidBody, ActorFactoryRigidBody, SFXGame )

	public:
	};

	class BioActorFactoryPhysicsActor: public SFXActorFactoryRigidBody
	{
		DECLARE_PACKAGE_CLASS( BioActorFactoryPhysicsActor, SFXActorFactoryRigidBody, SFXGame )

	public:
	};

	class BioAppearanceVehicleSettings: public Component
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceVehicleSettings, Component, SFXGame )

	public:

		Int m_nMaterialConfig; //offset = 72, size = 4
	};

	class BioCreatureSoundSet: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCreatureSoundSet, Object, SFXGame )

	public:
	};

	enum eColorSelection
	{
		BDA_White,
		BDA_Yellow,
		BDA_Blue,
	};

	class BioDestinationArrow: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioDestinationArrow, Actor, SFXGame )

	public:

		SkeletalMeshComponent* Mesh; //offset = 508, size = 4

		void SetArrowColor( Byte clr, MaterialInstanceConstant* MC );
	};

	class BioFollowMarker: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioFollowMarker, Actor, SFXGame )

	public:
	};

	struct BioHardLinkReference
	{
		Object* Object; //offset = 0, size = 4
		String Comment; //offset = 4, size = 12
	};

	class BioHardLinks: public Object
	{
		DECLARE_PACKAGE_CLASS( BioHardLinks, Object, SFXGame )

	public:

		Array<BioHardLinkReference> References; //offset = 60, size = 12
	};

	const char* HistoryLength = 10;

	enum SFXNotificationPriotity
	{
		NOTIFICATIONPRIORITY_UNDEFINED,
		NOTIFICATIONPRIORITY_NORMAL,
	};

	struct SFXNotificationData
	{
		Name nmType; //offset = 0, size = 8
		srTitle srTitle; //offset = 8, size = 4
		srSubtitle srSubtitle; //offset = 12, size = 4
		srBody srBody; //offset = 16, size = 4
		srAltTitle srAltTitle; //offset = 20, size = 4
		srAltBody srAltBody; //offset = 24, size = 4
		srAltSubtitle srAltSubtitle; //offset = 28, size = 4
		Float DisplayTime; //offset = 32, size = 4
		Int Priority; //offset = 36, size = 4
		String sImageResource; //offset = 40, size = 12
		Name nRemoteEvent; //offset = 52, size = 8
		Name nmSound; //offset = 60, size = 8
		Int nFlourishID; //offset = 68, size = 4
		Bool bCanBeMerged: 1; //offset = 72, size = 4
	};

	struct SFXNotification
	{
		Name nmType; //offset = 0, size = 8
		Int nPriority; //offset = 8, size = 4
		Float CreationTime; //offset = 12, size = 4
		Float fDisplayTime; //offset = 16, size = 4
		String sTitle; //offset = 20, size = 12
		String sSubtitle; //offset = 32, size = 12
		String sBody; //offset = 44, size = 12
		Texture* oImage; //offset = 56, size = 4
		Name nRemoteEvent; //offset = 60, size = 8
		Name nmSound; //offset = 68, size = 8
		Name nmStopSound; //offset = 76, size = 8
		Int nFlourishID; //offset = 84, size = 4
		Int Data1; //offset = 88, size = 4
	};

	struct HintDefinition
	{
		Name HintName; //offset = 0, size = 8
		Bool Enabled: 1; //offset = 8, size = 4
		DefaultText DefaultText; //offset = 12, size = 4
		PS3Text PS3Text; //offset = 16, size = 4
		PCText PCText; //offset = 20, size = 4
		Float DisplayDuration; //offset = 24, size = 4
		Float CooldownTime; //offset = 28, size = 4
		Float UpdateTime; //offset = 32, size = 4
		Float TimeRemaining; //offset = 36, size = 4
		Int MaxDifficulty; //offset = 40, size = 4
		Name ClearEvent; //offset = 44, size = 8
		Name ClearContext; //offset = 52, size = 8
		Byte HintPosition; //offset = 60, size = 1
	};

	struct HintTrackingData
	{
		Int Num; //offset = 0, size = 4
		Float LastTime; //offset = 4, size = 4
		Float FirstTime; //offset = 8, size = 4
		Float Times[10]; //offset = 12, size = 4
		Int QueueHead; //offset = 52, size = 4
	};

	class BioHintSystemBase: public Object
	{
		DECLARE_PACKAGE_CLASS( BioHintSystemBase, Object, SFXGame )

	public:

		Int nNotificationBodyLength; //offset = 60, size = 4
		Bool m_bEnabled: 1; //offset = 64, size = 4
		Bool m_bDisabledForTutorial: 1; //offset = 64, size = 4
		Float m_fMinimumTimeBetweenAnyHints; //offset = 68, size = 4
		Array<HintDefinition> m_aHints; //offset = 72, size = 12
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_mTrackingData; //offset = 84, size = 20
		Float m_fCurrentTime; //offset = 104, size = 4
		Int m_nCurrentlyDisplayedHint; //offset = 108, size = 4
		Array<SFXNotification> m_aNotifications; //offset = 112, size = 12
		Bool m_bNotificationIsPaused: 1; //offset = 124, size = 4
		Bool m_bNotificationIsVisible: 1; //offset = 124, size = 4
		SFXNotification m_nCurrentlyDisplayedNotification; //offset = 128, size = 92
		Array<SFXNotificationData> m_NotificationData; //offset = 220, size = 12

		String TruncateNotificationBody( String sBody );
		void CacheCurrentState();
		void Tick( Float TimeDelta );
		Float TimeSince( Float fTime );
		Float GetPreviousTime( HintTrackingData oData, Int nAge );
		HintTrackingData GetTrackingData( Name nmEvent, Name nmContext );
		void Clear();
		void HintEvent( Name nmEvent, Name nmContext );
		void ClearNotifications();
		void OnNotificationCompleted( SFXNotification CurrentNotification, BioWorldInfo* oWorldInfo, BioPlayerController* oController );
		Bool IsHintsOptionDisabled(, BioPlayerController* oPC );
		void SetNotificationPaused( Bool bVal );
		void JournalUpdate( srTitle srTitle, srDescription srDescription );
		void CodexUpdate( srTitle srTitle, srDescription srDescription );
		void PopulateNotificationOneParameter( SFXNotificationData oNoteData, SFXNotification oNotification, Int nParam1 );
		SFXNotificationData GetNotificationData( Name nmNotificationType );
		void ShowNotification( SFXNotification oNotification );
		void AddNotification_Custom( Float nDisplayTime, String sTitle, String sSubtitle, String sBody, Texture* Image, Name nRemoteEvent, Name nmType, Name nmSound, Int Priority, Int FlourishID );
		void AddNotification_AchievementUnlocked( AchievementData Data, GrinderAchievement Grinder );
		void AddNotification_AchievementChange( String sTitle, String sSubtitle, String sBody, Int currentCount, Int totalCount );
		void AddNotification_AmmoRecovery( Int nAmount );
		void AddNotification_HeavyWeaponAmmoRecovery( Int nAmount );
		void AddNotification_ElementZeroRecovery( Int nAmount );
		void AddNotification_PlatinumRecovery( Int nAmount );
		void AddNotification_PalladiumRecovery( Int nAmount );
		void AddNotification_IridiumRecovery( Int nAmount );
		void AddNotification_RenegadeChange( Int nAmount );
		void AddNotification_ParagonChange( Int nAmount );
		void AddNotification_MedigelRecovery( Int nAmount );
		void AddNotification_CreditRecovery( Int nAmount );
		void AddNotification_CodexChange();
		void AddNotification_JournalChange();
		void AddNotification( SFXNotification oNotification );
	};

	enum EBioLayer
	{
		LAYER_DAMAGE_CONCENTRATION,
		LAYER_SUPPRESSION_CONCENTRATION,
		LAYER_BIOTIC_HARDENING,
		LAYER_TECH_HARDENING,
		LAYER_TOXIC_RESISTANCE,
		LAYER_DISABLING_EFFECTS_RESISTANCE,
	};

	class BioLayers: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioLayers, BioBaseComponent, SFXGame )

	public:

		Float m_aEntry[10]; //offset = 68, size = 4
	};

	class BioLoadingMovie: public Object
	{
		DECLARE_PACKAGE_CLASS( BioLoadingMovie, Object, SFXGame )

	public:

		String MovieName; //offset = 60, size = 12
		Int LoopBackFrame; //offset = 72, size = 4
		WwiseEventPairObject* LoadingMovieWwisePair; //offset = 76, size = 4
	};

	class BioObject: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioObject, BioBaseComponent, SFXGame )

	public:

		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_ClassCache; //offset = 68, size = 20

		Bool ValidateOwnershipSemantics( Object* Target, Bool isVerbose, Int recurrence );
		void ParseIntoArray( Array<String> aString, String sDelimitedStrings, String sDelimiter, Bool bCullEmptyStrings );
		void ParseIntoArrayWS( String whitespaceDelimitedStrings, Array<String> Strings );
		Bool GetEnumValue( Class* clsEnumDefiner, Name nmEnumField, Name nmEnumValue, Byte cEnumValue );
		Class* FindClass( Name nmClass );
	};

	struct BioPhysicsSoundsInfo
	{
		Int nPriority; //offset = 0, size = 4
		AudioComponent* oAudioComp; //offset = 4, size = 4
		Float fLastTimePlayed; //offset = 8, size = 4
	};

	class BioPhysicsSounds: public Object
	{
		DECLARE_PACKAGE_CLASS( BioPhysicsSounds, Object, SFXGame )

	public:

		Float m_fMaxMass; //offset = 60, size = 4
		Float m_fMaxSpeed; //offset = 64, size = 4
		Float m_fMinTimeBetweenSoundByActor; //offset = 68, size = 4
		Float m_fMinSpeedToPlay; //offset = 72, size = 4
		Bool m_bEnableLogging: 1; //offset = 76, size = 4
		Array<BioPhysicsSoundsInfo> m_aAudioTracks; //offset = 80, size = 12

		Float GetSpeedSpecifier( PrimitiveComponent* oComp, Float fSpeedToUse );
		Float GetMassSpecifier( PrimitiveComponent* oComp );
		void UpdateLastCollidedActor( PrimitiveComponent* oComp, Actor* OtherActor );
		void UpdateLastTimePlayed( PrimitiveComponent* oComp );
		Bool IsTooSlowToPlay( PrimitiveComponent* oComp );
		Bool IsSameCollidedActor( PrimitiveComponent* oComp, Actor* OtherActor );
		Bool IsTooSoonToPlay( PrimitiveComponent* oComp );
		Bool CanPlay( PrimitiveComponent* oComp0, PrimitiveComponent* oComp1, CollisionImpactData RigidCollisionData );
		Int GetPhysMatWwiseType( PhysicalMaterial* PhysMat, Int PhysMatWwiseType, SFXPhysicalMaterialPhysics* PhysMatPhysics );
		WwiseEvent* GetWwiseEvent( PhysicalMaterial* PhysMat, WwiseEvent* PhysMatWwiseEvent, SFXPhysicalMaterialPhysics* PhysMatPhysics );
		void PlaySoundOnPhysMatAt( GameInfo* Game, PhysicalMaterial* PhysMat, PhysicalMaterial* PhysMatSweetener, Vector pos, Array<String> RTPCNames, Array<Float> RTPCValues, WwiseEvent* PhysicsWwiseEvent, SFXGame* SFXGameObj, Int SweetenerRTPCValue );
	};

	enum EGalaxyObjectUsableAutoSet
	{
		GalaxyObjectUsable_Unset,
	};

	enum EGalaxyObjectUsablePlotAutoSet
	{
		GalaxyObjectUsablePlot_Unset,
	};

	enum EGalaxyObjectVisibleAutoSet
	{
		GalaxyObjectVisible_Unset,
	};

	enum EGalaxyObjectVisiblePlotAutoSet
	{
		GalaxyObjectVisiblePlot_Unset,
	};

	class SFXGalaxyMapObject: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXGalaxyMapObject, Object, SFXGame )

	public:

		Int PosX; //offset = 60, size = 4
		Int PosY; //offset = 64, size = 4
		Int TableID; //offset = 68, size = 4
		String Tag; //offset = 72, size = 12
		String NameText; //offset = 84, size = 12
		DisplayName DisplayName; //offset = 96, size = 4
		Float Scale; //offset = 100, size = 4
		Int nPreviouslySelectedIndex; //offset = 104, size = 4
		Byte VisibleConditionalRegion; //offset = 108, size = 1
		Byte VisibleConditionalPlot; //offset = 109, size = 1
		Byte VisibleConditionalName; //offset = 110, size = 1
		Byte UsableConditionalRegion; //offset = 111, size = 1
		Byte UsableConditionalPlot; //offset = 112, size = 1
		Byte UsableConditionalName; //offset = 113, size = 1
		Int VisibleConditional; //offset = 116, size = 4
		Int VisibleFunction; //offset = 120, size = 4
		Int VisibleParameter; //offset = 124, size = 4
		Int UsableConditional; //offset = 128, size = 4
		Int UsableFunction; //offset = 132, size = 4
		Int UsableParameter; //offset = 136, size = 4

		void EnumerateChildren( SFXGalaxyMapObject* C, Int I, Array<SFXGalaxyMapObject*> Children );
		Bool LoadFrom2DA();
		void GetChildren( Array<SFXGalaxyMapObject*> Children );
		void RemoveChild( SFXGalaxyMapObject* Child );
		SFXGalaxyMapObject* AddChild();
	};

	enum EBioPlanetPlotLabelConditionAutoSet
	{
		BioPlanetPlotLabelCondition_Unset,
	};

	enum EBioPlanetPlotLabelConditionPlotAutoSet
	{
		BioPlanetPlotLabelConditionPlot_Unset,
	};

	enum EBioPlanetLandConditionAutoSet
	{
		BioPlanetLandCondition_Unset,
	};

	enum EBioPlanetLandConditionPlotAutoSet
	{
		BioPlanetLandConditionPlot_Unset,
	};

	enum EBioPlanetEventTransitionAutoSet
	{
		BioPlanetEventTransition_Unset,
	};

	enum EBioPlanetEventTransitionPlotAutoSet
	{
		BioPlanetEventTransitionPlot_Unset,
	};

	enum EBioPlanetEventConditionAutoSet
	{
		BioPlanetEventCondition_Unset,
	};

	enum EBioPlanetEventConditionPlotAutoSet
	{
		BioPlanetEventConditionPlot_Unset,
	};

	enum EPlanetType
	{
		NOSCAN_PLANET,
		ROCK_PLANET,
		DESERT_PLANET,
		OCEAN_PLANET,
		GARDEN_PLANET,
		GIANT_ICE_PLANET,
	};

	enum EOrbitRingType
	{
		OR_NONE,
		OR_ORBIT,
	};

	enum ESystemLevelType
	{
		SL_PLANET,
		SL_ANOMALY,
		SL_RINGPLANET,
		SL_MASSRELAY,
	};

	enum EMineralType
	{
		MINERAL_RED,
		MINERAL_BLUE,
		MINERAL_GREEN,
	};

	enum EFeatureType
	{
		FEATURE_INVALID,
		FEATURE_MINERAL,
		FEATURE_LABEL,
		FEATURE_PROBES,
	};

	struct PlanetSun
	{
		LinearColor SunColor; //offset = 0, size = 16
		Float Brightness; //offset = 16, size = 4
	};

	class BioPlanet: public SFXGalaxyMapObject
	{
		DECLARE_PACKAGE_CLASS( BioPlanet, SFXGalaxyMapObject, SFXGame )

	public:

		Description Description; //offset = 140, size = 4
		ButtonLabel ButtonLabel; //offset = 144, size = 4
		GFxMovieInfo* PreviewImageResource; //offset = 148, size = 4
		MissionBriefing MissionBriefing; //offset = 152, size = 4
		Int MissionBriefingStrRefOverride; //offset = 156, size = 4
		Bool AlreadyExplored: 1; //offset = 160, size = 4
		Byte PlanetType; //offset = 164, size = 1
		Byte OrbitRing; //offset = 165, size = 1
		Byte SystemLevelType; //offset = 166, size = 1
		Byte PlanetLevelType; //offset = 167, size = 1
		Byte PlanetLandConditionRegion; //offset = 168, size = 1
		Byte PlanetLandConditionPlot; //offset = 169, size = 1
		Byte PlanetLandConditionName; //offset = 170, size = 1
		Byte PlanetEventConditionRegion; //offset = 171, size = 1
		Byte PlanetEventConditionPlot; //offset = 172, size = 1
		Byte PlanetEventConditionName; //offset = 173, size = 1
		Byte PlanetEventTransitionRegion; //offset = 174, size = 1
		Byte PlanetEventTransitionPlot; //offset = 175, size = 1
		Byte PlanetEventTransitionName; //offset = 176, size = 1
		Byte PlanetPlotLabelConditionRegion; //offset = 177, size = 1
		Byte PlanetPlotLabelConditionPlot; //offset = 178, size = 1
		Byte PlanetPlotLabelConditionName; //offset = 179, size = 1
		Float ResourceRichness; //offset = 180, size = 4
		Int NumResources; //offset = 184, size = 4
		Float PalladiumPct; //offset = 188, size = 4
		Float PlatinumPct; //offset = 192, size = 4
		Float IridiumPct; //offset = 196, size = 4
		Float PlanetRotation; //offset = 200, size = 4
		LinearColor RingColor; //offset = 204, size = 16
		LinearColor CloudColor; //offset = 220, size = 16
		Array<PlanetSun> Suns; //offset = 236, size = 12
		LinearColor CoronaColor; //offset = 248, size = 16
		Float Opacity; //offset = 264, size = 4
		Float FringeBloom; //offset = 268, size = 4
		MaterialInstanceConstant* PlanetMaterial; //offset = 272, size = 4
		MaterialInstanceConstant* CloudMaterial; //offset = 276, size = 4
		StaticMesh* Mesh; //offset = 280, size = 4
		Prefab* ScenePrefab; //offset = 284, size = 4
		Texture2D* TextureParam; //offset = 288, size = 4
		Float RelativeSize; //offset = 292, size = 4
		Float DefaultDisplaySize; //offset = 296, size = 4
		Float TerrainDepthFactor; //offset = 300, size = 4
		Array<SFXPlanetFeature*> Features; //offset = 304, size = 12
		String MapName; //offset = 316, size = 12
		String StartPoint; //offset = 328, size = 12
		Float UnscaledMineralsSum; //offset = 340, size = 4
		Bool bInitialized: 1; //offset = 344, size = 4
		Float PlacedMineralsPool; //offset = 348, size = 4
		Float RandomMineralsBase; //offset = 352, size = 4
		Float EezoMineralsBase; //offset = 356, size = 4
		Float ScanBarMaxMineralSize; //offset = 360, size = 4
		String ExitMapName; //offset = 364, size = 12
		String ExitStartPoint; //offset = 376, size = 12
		String ImageBackground; //offset = 388, size = 12
		Int PlanetLandCondition; //offset = 400, size = 4
		String PlanetEvent; //offset = 404, size = 12
		Int PlanetEventCondition; //offset = 416, size = 4
		Int PlanetEventFunction; //offset = 420, size = 4
		Int PlanetEventParameter; //offset = 424, size = 4
		Int PlanetEventTransition; //offset = 428, size = 4
		Int PlanetEventTransitionParameter; //offset = 432, size = 4
		PlanetEventMessage PlanetEventMessage; //offset = 436, size = 4
		PlanetPlotLabel PlanetPlotLabel; //offset = 440, size = 4
		Int PlanetPlotLabelCondition; //offset = 444, size = 4
		Int ActiveWorld; //offset = 448, size = 4
		Bio2DA* m_pPlanetTable; //offset = 452, size = 4
		Bio2DA* m_pMapTable; //offset = 456, size = 4

		void EnumerateChildren( SFXCluster* Cluster, SFXSystem* System );
		Int GetScaledResourceAmount( Byte MineralType, Float UnscaledAmount );
		void RemoveChild( SFXGalaxyMapObject* Child );
		void GetChildren( Array<SFXGalaxyMapObject*> Children );
		SFXGalaxyMapObject* AddChild(, SFXPlanetFeature* newFeature );
		Vector SphereToPlanePos( Vector vSphere, Float SphereRadius, Vector vPosition2D, Float angularPos );
		Vector PlanePosToSphere( Vector vPosition2D, Float SphereRadius, Vector vSphere, Float XP, Float yp );
		Float GetPlanetSize();
		void LoadPlanetData( InterpActor* Planet, Array<ParticleSystemComponent*> TemporaryComponents, SFXPlanetFeature* F, Int I, Vector V, Vector vPos, Array<Vector> vProbeImpacts, ParticleSystemComponent* Particle, Float fDist, Int nRetrievedAmount, SFXGameModeOrbital* GameMode, BioPlayerController* PC );
		void LoadProbeImpacts( Array<Vector> vImpacts );
		void SaveProbeImpact( Vector vImpact );
		void SetVisited( Bool bVisited );
		Bool IsVisited();
		void SetupMinerals();
		Bool LoadFrom2DA();
	};

	class BioPlaypenVolume: public Volume
	{
		DECLARE_PACKAGE_CLASS( BioPlaypenVolume, Volume, SFXGame )

	public:

		Bool bSubtractive: 1; //offset = 568, size = 4
		Guid PlaypenGuid; //offset = 572, size = 16
	};

	class BioPlotTreasure: public Object
	{
		DECLARE_PACKAGE_CLASS( BioPlotTreasure, Object, SFXGame )

	public:

		Bio2DA* oPlotTreasureResources2DA; //offset = 60, size = 4
		Bio2DA* oPlotTreasureTreasure2DA; //offset = 64, size = 4
		Bio2DA* oPlotTreasureTech2DA; //offset = 68, size = 4

		Bool GetMapName( String sOutMapName );
		Bool GetPlotTreasureTechInt( Name nmTech, Name nmNameHeader, Name nmHeader, Int nTechValue );
		Bool GetPlotTreasureTechName( Name nmTech, Name nmHeader, Name nmTechName );
		Bool GetPlotTreasureTreasureName( Int nTreasureId, Name nmHeader, Name nmPlotTreasureName );
		Bool GetPlotTreasureTreasureInt( Int nTreasureId, Name nmHeader, Int nPlotTreasureValue );
		Bool GetPlotTreasureResourcesInt( Name nmLevel, Name nmHeader, Int nPlotTreasureValue );
	};

	struct CameraInfo
	{
		Vector vPosition; //offset = 0, size = 12
		Rotator rRotation; //offset = 12, size = 12
		Float fFov; //offset = 24, size = 4
		Float fNearPlane; //offset = 28, size = 4
	};

	struct ActorInfo
	{
		Vector myPosition; //offset = 0, size = 12
		Rotator myRotation; //offset = 12, size = 12
		Vector headBaseBonePosition; //offset = 24, size = 12
		Vector headBonePosition; //offset = 36, size = 12
		Vector vCameraFocusPoint; //offset = 48, size = 12
		Vector vProceduralCameraPosition; //offset = 60, size = 12
		Rotator rProceduralCameraRotation; //offset = 72, size = 12
	};

	class BioProceduralCameraBasic: public Object
	{
		DECLARE_PACKAGE_CLASS( BioProceduralCameraBasic, Object, SFXGame )

	public:

		void FixedCamera( ActorInfo stActorInfo, CameraInfo stCameraInfo, Bool bInvert, Rotator rTmpRotator, Vector vTmpVector );
	};

	class BioRadarMapBoundaries: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioRadarMapBoundaries, Actor, SFXGame )

	public:

		Vector m_vBoundarySize; //offset = 508, size = 12
	};

	struct BioSFSoundAssetResource
	{
		Name Tag; //offset = 0, size = 8
		WwiseEvent* StartEvent; //offset = 8, size = 4
		WwiseEvent* StopEvent; //offset = 12, size = 4
	};

	class BioSFResources: public Object
	{
		DECLARE_PACKAGE_CLASS( BioSFResources, Object, SFXGame )

	public:

		Array<BioSFSoundAssetResource> Sounds; //offset = 60, size = 12
		Array<BioSFScreenTip*> LoadScreenTips; //offset = 72, size = 12
		Array<GFxMovieInfo*> Movies; //offset = 84, size = 12
	};

	class BioSocketSupermodel: public SkeletalMesh
	{
		DECLARE_PACKAGE_CLASS( BioSocketSupermodel, SkeletalMesh, SFXGame )

	public:

		Array<SkeletalMesh*> Dependents; //offset = 596, size = 12
	};

	enum ECharacterClass
	{
		ClassType_Invalid,
		ClassType_Soldier,
		ClassType_Adept,
		ClassType_Infiltrator,
	};

	struct ScaledFloat
	{
		Float X; //offset = 0, size = 4
		Float Y; //offset = 4, size = 4
		Int MaxLevel; //offset = 8, size = 4
		Int Level; //offset = 12, size = 4
		Float Value; //offset = 16, size = 4
		Array<SFXGameEffect*> Bonuses; //offset = 20, size = 12
		Float StaticBonus; //offset = 32, size = 4
	};

	struct TimeDilationStruct
	{
		Name Identifier; //offset = 0, size = 8
		InterpCurveFloat Curve; //offset = 8, size = 16
		Float TotalTime; //offset = 24, size = 4
		Float Time; //offset = 28, size = 4
	};

	struct HenchPackageMap
	{
		String HenchTag; //offset = 0, size = 12
		String PackageName; //offset = 12, size = 12
	};

	class SFXGame: public GameInfo
	{
		DECLARE_PACKAGE_CLASS( SFXGame, GameInfo, SFXGame )

	public:

		Bool EnableDamage: 1; //offset = 836, size = 4
		Bool bMin1Health: 1; //offset = 836, size = 4
		Bool bAutoUnlitDownsizeInCombat: 1; //offset = 836, size = 4
		SFXGameConfig* gameconfig; //offset = 840, size = 4
		Float PhysicsDamageMultiplier; //offset = 844, size = 4
		SFXObjectPool* ObjectPool; //offset = 848, size = 4
		SFXVocalizationManager* VocManager; //offset = 852, size = 4
		SFXOnlineSubsystem* SFXOnlineSubsystem; //offset = 856, size = 4
		SFXBonusList* BonusList; //offset = 860, size = 4
		BioPlayerSquad* PlayerSquad; //offset = 864, size = 4
		String MaleActorType; //offset = 868, size = 12
		String FemaleActorType; //offset = 880, size = 12
		String MaleCustomHead; //offset = 892, size = 12
		String FemaleCustomHead; //offset = 904, size = 12
		Bool bInCombat: 1; //offset = 916, size = 4
		Bool bForceCombat: 1; //offset = 916, size = 4
		Bool bGenerateTutorialEvents: 1; //offset = 916, size = 4
		Bool bShowSquadScreenMessageBoxes: 1; //offset = 916, size = 4
		Float StormStamina; //offset = 920, size = 4
		Float StormRegen; //offset = 924, size = 4
		Float StormStaminaNonCombat; //offset = 928, size = 4
		Float StormRegenNonCombat; //offset = 932, size = 4
		Float HackCrouchCoverOffset; //offset = 936, size = 4
		Float fAutoUnlitDownsizeThreshold; //offset = 940, size = 4
		Array<HenchPackageMap> HenchmanPackageMap; //offset = 944, size = 12
		Float TimeDilationOverride; //offset = 956, size = 4
		Array<TimeDilationStruct> TimeDilationCurves; //offset = 960, size = 12
		WwiseEvent* StartSlowEvent; //offset = 972, size = 4
		WwiseEvent* StopSlowEvent; //offset = 976, size = 4
		Class* Difficulty; //offset = 980, size = 4
		Array<Name> NGPlusPlotVariables; //offset = 984, size = 12

		void PulseFullAmmoMessage();
		void StartMatch();
		void SetNGPlusPlotStates( BioWorldInfo* bioWorld, BioGlobalVariableTable* PlotVars, Array<Int> boolVars, Array<Int> BoolVals, Array<Int> IntVals, Int idx, Int nIndex );
		void EnumeratePersonalizationVars( Array<Int> Vars );
		void AddCustomElementListPlotVars( Array<CustomizableElement> Elements, Array<Int> Vars, Int idx );
		void OnGameCompleted( Int nEndID, String SParam, Float fTimePlayed, SFXEngine* Engine, LocalPlayer* Player );
		void SetRenegadePoints( Int nPoints, BioWorldInfo* oWorldInfo, BioGlobalVariableTable* oVariables );
		Int GetRenegadePoints(, BioWorldInfo* oWorldInfo, BioGlobalVariableTable* oVariables );
		void SetParagonPoints( Int nPoints, BioWorldInfo* oWorldInfo, BioGlobalVariableTable* oVariables );
		Int GetParagonPoints(, BioWorldInfo* oWorldInfo, BioGlobalVariableTable* oVariables );
		ImpactInfo CalcWeaponFire( Weapon* W, Vector StartTrace, Vector EndTrace, Array<ImpactInfo> ImpactList );
		void OnPlayerSquadDeath();
		Bool CheckGameOver(, BioPlayerController* C );
		void SignalEndGame( GameOverString GameOverString, BioWorldInfo* BWI, LocalPlayer* Player, BioPlayerController* PC, Name nmStreamingChunk );
		void SwitchTarget( Controller* InstigatorController, Actor* Target, SFXPRI* InstigatorPRI );
		Bool IsCurrentTarget( Controller* InstigatorController, Actor* Target, SFXPRI* InstigatorPRI );
		void ScoreHeadshot( Controller* InstigatorController, Class* DamageType, SFXPRI* InstigatorPRI );
		void ScoreDamage( Controller* InstigatorController, Controller* Damaged, Float RawDamageDealt, Float ActualDamageDealt, Class* DamageType, SFXPRI* InstigatorPRI, BioPawn* DamagedPawn );
		void ScoreKill( Controller* Killer, Controller* Other, SFXPRI* InstigatorPRI );
		void ScoreFlamethrowerTankKill( Controller* Killer, Controller* Other, SFXPRI* InstigatorPRI );
		void DestroySFXOnlineSubsystem();
		void PreExit();
		void InitGame( String Options, String ErrorMessage );
		Bool GrantScaledCredits( Int nSize, Bool bTickResource, SFXInventoryManager* oPlayerResMgr );
		void PlayTransientSound( WwiseBaseSoundObject* InWwiseEvent, Vector SoundLocation, Array<String> RTPCName, Array<Float> RTPCValue, WwiseAudioComponent* Component, Int I );
		SFXInventoryManager* GetPlayerResourcesManager(, BioWorldInfo* oBWI );
		void StartFirstUsePowerDelay( BioAiController* AI, BioPawn* Pawn );
		void ToggleCombatOverride( Bool bCombatOverride, Bool bWasInCombat, Bool bNowInCombat );
		void CombatEnded();
		void CombatStarted();
		void ProbeOnCombatEnd();
		void ProbeOnCombatBegin();
		void OnCombatEnd( BioPlayerController* PC, Array<SequenceObject*> SeqObjs, SequenceObject* Sequence, BioPawn* Pawn, SFXModule_GameEffectManager* EffectManager );
		void OnCombatStart( BioPlayerController* PC, BioPawnBehavior* PawnBehavior, Array<SequenceObject*> SeqObjs, SequenceObject* Sequence, BioPawn* oPlayerPawn, BioAiController* AI, SFXAI_Henchman* oHenchAI );
		Bool InCombat();
		Bool PreventPermanentDeath( BioPawn* KilledPawn );
		Bool PreventDeath( Pawn* KilledPawn, Controller* Killer, Class* DamageType, Vector HitLocation, BioPawn* Pawn );
		void Killed( Controller* Killer, Controller* KilledPlayer, Pawn* KilledPawn, Class* DamageType, BioPlayerController* PC, SFXEngine* Engine );
		void ModifyDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Actor* injured, Controller* InstigatedBy, Actor* DamageCauser, BioWorldInfo* Info, BioPlayerController* PC, Pawn* TargetPawn, BioPawn* TargetBP, SFXPRI* InstigatorPRI, SFXModule_GameEffectManager* Manager, RB_BodySetup* HitBody, SFXModule_Damage* DamageMod, Float Multiplier );
		void TriggerVocalizationEvent( Byte VocalizationID, BioPawn* InstigatedBy, BioPawn* Recipient, Float delay, Float fChanceToPlayModifier );
		void OnTimeDilationChange( Float NewTimeDilation );
		void Tick( Float TimeDelta, Float SlowestDilation );
		Float UpdateTimeDilationArray( Float TimeDelta );
		void CancelTimeDilation( Name Identifier, Int idx );
		void RequestTimeDilation( InterpCurveFloat Curve, Float TotalTime, Name Identifier, TimeDilationStruct Dilation );
		String FindHenchPackage( String HenchTag, HenchPackageMap Hench );
		void LoadPackage( String PackageName );
		void UpdatePlotStateRTPCs( BioGlobalVariableTable* VarTable, SFXPawn_Player* Player, WwiseAudioComponent* WorldWwiseComponent, Int CurrentMusicVal, Int CurrentParagonVal, Int CurrentRenegadeVal );
		void UpdatePlotVariables( SFXPawn_Player* Player, BioGlobalVariableTable* VarTable );
		Pawn* SpawnDefaultPawnFor( Controller* NewPlayer, NavigationPoint* StartSpot, Vector StartLocation, Rotator StartRotation, SFXEngine* Engine, BioWorldInfo* Info, Bool bIsFemale, Bool bStartedGame, Int IsFemale, Class* CharacterClass, String FirstName, Byte Origin, Byte Notoriety, SFXPower* Power, Float Rank, Int Refund, Float Rank1Cost, Int Index, String BonusTalent, String FaceCode, BioMorphFace* NewMorphHead, String PackageName, SFXPawn_Player* ResultPawn, BioPawnType* PawnType, SkeletalMesh* CustomMesh, Bool bPendingDefaultMorphHead, Bool bLastBonusHadRanks, Bool bHadBonusPower );
		Class* GetCharacterClassByName( String ClassName );
		Byte GetIDByClass( Class* PlayerClass );
		NavigationPoint* FindPlayerStart( Controller* Player, Byte InTeam, String IncomingName, Actor* chkActor, Name ATStart );
		void SetPlayerDefaults( Pawn* PlayerPawn, Int PlayerLevel, BioPawn* Pawn );
		Bool GetChallengeLevel( Int idx, Int ChallengeLevel, BioPawn* PlayerPawn, Int PlayerLevel );
		void GetChallengeModifier( Int idx, Float ChallengeModifier, Float LevelModifier, Float TechModifier, Int ChallengeLevel );
		Bool GetPlayerLevel( Int ControllerId, Int PlayerLevel, BioPlayerController* PC, LocalPlayer* LP );
		SFXPawn_Player* GetPlayer( Int ControllerId, BioPlayerController* PC, LocalPlayer* LP );
		void UpdateDamage( Int Damage );
		void SortActorsByAngle( Array<Actor*> List, Vector RefLocation, Rotator RefRotation, Bool bPreferBioPawns );
		String GetSimpleString( StrRef StrRef, Bool bParse );
		void PostBeginPlay();
		void ReCalculate( ScaledFloat F, SFXGameEffect* GE, Float DynamicBonus );
	};


	class BioSPGame: public SFXGame
	{
		DECLARE_PACKAGE_CLASS( BioSPGame, SFXGame, SFXGame )

	public:
		struct PendingMatch
		{
		};

		AudioComponent* m_oLogoMovieAudioComponent; //offset = 996, size = 4
		TextureMovie* m_oTextureMovie; //offset = 1000, size = 4
		srGameOverString srGameOverString; //offset = 1004, size = 4

		void SpawnGameOverGUI( BioPlayerController* pController );
		void Reset();
		void OnMovieFinished( TextureMovie* TextureMovie );
		void PostLogin( PlayerController* NewPlayer, Int nShouldPlay, Int nIsInterruptable );
		void SetupPartyMemberAttributes( BioPawnBehavior* Behavior, Class* attributesClass );
		void ExtractLogoMovieSettings( Int nShouldPlay, Int nIsInterruptable );
		void StartMatch();
	};

	class BioSpriteTranslucentComponent: public SpriteComponent
	{
		DECLARE_PACKAGE_CLASS( BioSpriteTranslucentComponent, SpriteComponent, SFXGame )

	public:

		Float TranslucentScale; //offset = 460, size = 4
		Float fDelayTime; //offset = 464, size = 4
		Float fFadeInTime; //offset = 468, size = 4
		Float fDuration; //offset = 472, size = 4
		Float fFadeOutTime; //offset = 476, size = 4
		Bool bRenderOcclusionOnly: 1; //offset = 480, size = 4
		Bool bIsOccluder: 1; //offset = 480, size = 4
		Float fIntensityCurveAccumulator; //offset = 484, size = 4
		Float fScaleCurveAccumulator; //offset = 488, size = 4
		Float fBrightnessCurveAccumulator; //offset = 492, size = 4
	};

	class BioSunFlareComponent: public BioSpriteTranslucentComponent
	{
		DECLARE_PACKAGE_CLASS( BioSunFlareComponent, BioSpriteTranslucentComponent, SFXGame )

	public:

		Float Intensity; //offset = 496, size = 4
		LinearColor FlareTint; //offset = 500, size = 16
		Bool UseParentOverrideTint: 1; //offset = 516, size = 4
		Bool IsHaloComponent: 1; //offset = 516, size = 4
		Float Distance; //offset = 520, size = 4
		Float BrightPercent; //offset = 524, size = 4
	};

	class BioSunFlareStreakComponent: public BioSpriteTranslucentComponent
	{
		DECLARE_PACKAGE_CLASS( BioSunFlareStreakComponent, BioSpriteTranslucentComponent, SFXGame )

	public:

		Float Intensity; //offset = 496, size = 4
		LinearColor FlareTint; //offset = 500, size = 16
		Bool UseParentOverrideTint: 1; //offset = 516, size = 4
		Bool IsHaloComponent: 1; //offset = 516, size = 4
		Float Distance; //offset = 520, size = 4
		Float HorizontalOffset; //offset = 524, size = 4
		Float HorizontalMoveRate; //offset = 528, size = 4
		Float VerticalOffset; //offset = 532, size = 4
		Float VerticalMoveRate; //offset = 536, size = 4
		Float BrightPercent; //offset = 540, size = 4
	};

	class BioSunActor: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioSunActor, Actor, SFXGame )

	public:

		Float FocusDistance; //offset = 508, size = 4
		LinearColor SunTint; //offset = 512, size = 16
		Bool UseBaseLightTint: 1; //offset = 528, size = 4
		Bool HideAllFlaresOverride: 1; //offset = 528, size = 4
		Bool ViewDependentIntensity: 1; //offset = 528, size = 4
		Bool bAnimateIntensity: 1; //offset = 528, size = 4
		Bool bAnimateScale: 1; //offset = 528, size = 4
		Bool bAnimateBrightness: 1; //offset = 528, size = 4
		BioSpriteTranslucentComponent* SunSprite; //offset = 532, size = 4
		BioSunFlareComponent* HaloSprite; //offset = 536, size = 4
		BioSunFlareComponent* FlareSprite0; //offset = 540, size = 4
		BioSunFlareComponent* FlareSprite1; //offset = 544, size = 4
		BioSunFlareComponent* FlareSprite2; //offset = 548, size = 4
		BioSunFlareComponent* FlareSprite3; //offset = 552, size = 4
		BioSunFlareComponent* FlareSprite4; //offset = 556, size = 4
		BioSunFlareComponent* FlareSprite5; //offset = 560, size = 4
		BioSunFlareComponent* FlareSprite6; //offset = 564, size = 4
		BioSunFlareComponent* FlareSprite7; //offset = 568, size = 4
		BioSunFlareComponent* FlareSprite8; //offset = 572, size = 4
		BioSunFlareComponent* FlareSprite9; //offset = 576, size = 4
		BioSunFlareStreakComponent* StreakSprite0; //offset = 580, size = 4
		BioSunFlareStreakComponent* StreakSprite1; //offset = 584, size = 4
		BioSunFlareStreakComponent* StreakSprite2; //offset = 588, size = 4
		BioSunFlareStreakComponent* StreakSprite3; //offset = 592, size = 4
		BioSunFlareStreakComponent* StreakSprite4; //offset = 596, size = 4
		BioSunFlareStreakComponent* StreakSprite5; //offset = 600, size = 4
		RawDistributionFloat IntensityCurve; //offset = 604, size = 28
		Float fIntensityCurveAccumulator; //offset = 632, size = 4
		RawDistributionFloat ScaleCurve; //offset = 636, size = 28
		Float fScaleCurveAccumulator; //offset = 664, size = 4
		RawDistributionFloat BrightnessCurve; //offset = 668, size = 28
		Float fBrightnessCurveAccumulator; //offset = 696, size = 4
		Float fDyingFadePercent; //offset = 700, size = 4
		Bool bDying: 1; //offset = 704, size = 4
		Float fFadeTime; //offset = 708, size = 4
	};

	class BioTacticalMoveToIndicator: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioTacticalMoveToIndicator, Actor, SFXGame )

	public:

		ParticleSystemComponent* ParticleSystem; //offset = 508, size = 4
		Float m_fFadeInTime; //offset = 512, size = 4
		Float m_fTimePassed; //offset = 516, size = 4
	};

	class SFXActorFactoryPhysicsAsset: public ActorFactoryPhysicsAsset
	{
		DECLARE_PACKAGE_CLASS( SFXActorFactoryPhysicsAsset, ActorFactoryPhysicsAsset, SFXGame )

	public:
	};

	class SFXCluster: public SFXGalaxyMapObject
	{
		DECLARE_PACKAGE_CLASS( SFXCluster, SFXGalaxyMapObject, SFXGame )

	public:

		Array<SFXSystem*> Systems; //offset = 140, size = 12
		Array<SFXCluster*> RelayConnections; //offset = 152, size = 12
		Texture2D* ClusterTexture; //offset = 164, size = 4
		LinearColor StarColor; //offset = 168, size = 16
		LinearColor StarColor2; //offset = 184, size = 16
		Float NebularDensity; //offset = 200, size = 4
		Float CloudTile; //offset = 204, size = 4
		Float SphereIntensity; //offset = 208, size = 4
		Float SphereSize; //offset = 212, size = 4
		Bool ExploredCluster: 1; //offset = 216, size = 4
		Bio2DA* m_pClusterTable; //offset = 220, size = 4
		Bio2DA* m_pSystemTable; //offset = 224, size = 4

		void RemoveChild( SFXGalaxyMapObject* Child, Int Index );
		void GetChildren( Array<SFXGalaxyMapObject*> Children );
		SFXGalaxyMapObject* AddChild(, SFXSystem* newSystem );
		Bool LoadFrom2DA();
	};

	enum ESFXDamageFalloffType
	{
		DamageFalloffType_Constant,
		DamageFalloffType_Linear,
	};

	enum EWeaponRange
	{
		WeaponRange_Invalid,
		WeaponRange_Melee,
		WeaponRange_Short,
	};

	struct ResistanceInfo
	{
		Float Shield; //offset = 0, size = 4
		Float Armour; //offset = 4, size = 4
		Float Biotic; //offset = 8, size = 4
	};

	struct HitReaction
	{
		Name BodyPart; //offset = 0, size = 8
		Byte AnimatedReaction; //offset = 8, size = 1
		Float ReactionChance; //offset = 12, size = 4
		Bool bDeathReaction: 1; //offset = 16, size = 4
		Bool bTriggerOnMove: 1; //offset = 16, size = 4
		Bool bTriggerOnIdle: 1; //offset = 16, size = 4
		Bool bFrontArc: 1; //offset = 16, size = 4
		Bool bRearArc: 1; //offset = 16, size = 4
		Bool bFromCrouch: 1; //offset = 16, size = 4
		Bool bIgnoreShields: 1; //offset = 16, size = 4
		Byte MaxRange; //offset = 20, size = 1
	};

	class SFXDamageType: public DamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType, DamageType, SFXGame )

	public:

		Byte FalloffType; //offset = 140, size = 1
		Bool bRadiusDamage: 1; //offset = 144, size = 4
		Bool bSpawnWeaponImpacts: 1; //offset = 144, size = 4
		Bool bNoShieldBreakVFX: 1; //offset = 144, size = 4
		Bool bIgnoreShields: 1; //offset = 144, size = 4
		Bool bIgnoreShieldHitLimit: 1; //offset = 144, size = 4
		Bool bPartBasedDamageDisabled: 1; //offset = 144, size = 4
		Bool bIgnoreArmor: 1; //offset = 144, size = 4
		Bool bHealthDamage: 1; //offset = 144, size = 4
		Bool bDamagesFriends: 1; //offset = 144, size = 4
		Bool bIgnoresBleedout: 1; //offset = 144, size = 4
		Bool bCausesPhysicsImpact: 1; //offset = 144, size = 4
		Bool bCausesRagdoll: 1; //offset = 144, size = 4
		Bool bResearchBonus_SniperArmorDamage: 1; //offset = 144, size = 4
		Bool bResearchBonus_HeavyPistolArmorDamage: 1; //offset = 144, size = 4
		Bool bResearchBonus_AssaultRifleResistanceDamage: 1; //offset = 144, size = 4
		Bool bResearchBonus_AutoPistolResistanceDamage: 1; //offset = 144, size = 4
		Bool bResearchBonus_ShotgunResistanceDamage: 1; //offset = 144, size = 4
		Bool bResearchBonus_SniperHeadShotBonus: 1; //offset = 144, size = 4
		Bool bImmediateDeath: 1; //offset = 144, size = 4
		Bool bIgnoresCoverDirection: 1; //offset = 144, size = 4
		Float DamageRadius; //offset = 148, size = 4
		ForceFeedbackWaveform* ShieldHitFFWaveform; //offset = 152, size = 4
		ResistanceInfo Resistance; //offset = 156, size = 12
		Float ShieldBonus; //offset = 168, size = 4
		Float ArmorBonus; //offset = 172, size = 4
		Float fChanceOfRagdoll; //offset = 176, size = 4
		Array<HitReaction> HitReactions; //offset = 180, size = 12
		Float fPhysicsReactionTimeScale; //offset = 192, size = 4
		BioVFXTemplate* DeathEffect; //offset = 196, size = 4
		BioVFXTemplate* PlayerFrameBufferEffect; //offset = 200, size = 4
		Int HeavyWeaponId; //offset = 204, size = 4

		Float GetWeaponRange( Class* Weapon, Byte Range );
	};

	class SFXDamageType_Suicide: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Suicide, SFXDamageType, SFXGame )

	public:
	};

	class SFXDoorMarker: public NavigationPoint
	{
		DECLARE_PACKAGE_CLASS( SFXDoorMarker, NavigationPoint, SFXGame )

	public:

		SFXDoor* MyDoor; //offset = 776, size = 4
		Bool bWaitUntilCompletelyOpened: 1; //offset = 780, size = 4
		Bool bInitiallyClosed: 1; //offset = 780, size = 4
		Bool bBlockedWhenClosed: 1; //offset = 780, size = 4
		Bool bDoorOpen: 1; //offset = 780, size = 4
		Bool bTempDisabledCollision: 1; //offset = 780, size = 4
		Bool bPrevBlockedState: 1; //offset = 780, size = 4
		Int nUnblockCount; //offset = 784, size = 4

		Bool SuggestMovePreparation( Pawn* Other );
		Bool ProceedWithMove( Pawn* Other );
		Actor* SpecialHandling( Pawn* Other );
		void DoorClosed();
		void DoorOpened();
		void PostBeginPlay();
		Int RestoreDoorMarkerBlockedState();
		Int UnblockDoorMarker();
	};

	enum EAsyncLoadStatus
	{
		ASYNC_LOAD_ERROR,
		ASYNC_LOAD_STARTED,
		ASYNC_LOAD_INPROGRESS,
	};

	enum ESaveGameAction
	{
		SaveGame_DoNothing,
		SaveGame_Load,
		SaveGame_LoadAutoSave,
		SaveGame_LoadChapterSave,
		SaveGame_Resume,
		SaveGame_Save,
		SaveGame_Overwrite,
		SaveGame_AutoSave,
	};

	struct PackageRemapInfo
	{
		Name PackageName; //offset = 0, size = 8
		Name SeekFreePackageName; //offset = 8, size = 8
	};

	struct DynamicLoadInfo
	{
		String ObjectName; //offset = 0, size = 12
		Name SeekFreePackageName; //offset = 12, size = 8
		Object* CachedObjectHandle; //offset = 20, size = 4
		Object* LoadedLinkerRoot; //offset = 24, size = 4
	};

	struct BlazeDataStore
	{
		Int DaysSinceRegistration; //offset = 0, size = 4
		Array<Byte> LoginInfo; //offset = 4, size = 12
		Array<Byte> PersonaID; //offset = 16, size = 12
		Bool bNucleusRefused: 1; //offset = 28, size = 4
		Bool bNucleusSuccessful: 1; //offset = 28, size = 4
		Bool bCerberusRefused: 1; //offset = 28, size = 4
		Bool bAutoLogin: 1; //offset = 28, size = 4
		Bool bDirty: 1; //offset = 28, size = 4
	};

	class SFXEngine: public GameEngine
	{
		DECLARE_PACKAGE_CLASS( SFXEngine, GameEngine, SFXGame )

	public:

		Vector PendingSaveGameLocation; //offset = 1340, size = 12
		Byte PendingSaveGameAction; //offset = 1352, size = 1
		Int PendingSaveGameIndex; //offset = 1356, size = 4
		Int PendingDeleteGameIndex; //offset = 1360, size = 4
		String CareerNameOverride; //offset = 1364, size = 12
		Float LastSaveTime; //offset = 1376, size = 4
		Float LastSecondsPlayed; //offset = 1380, size = 4
		Int CurrentUserID; //offset = 1384, size = 4
		Int CurrentDeviceID; //offset = 1388, size = 4
		Int CurrentLoadingTip; //offset = 1392, size = 4
		Array<Guid> DeadPawnList; //offset = 1396, size = 12
		Array<KismetBoolSaveRecord> SavedKismetList; //offset = 1408, size = 12
		Array<HenchmanSaveRecord> HenchmanRecords; //offset = 1420, size = 12
		Array<DoorSaveRecord> SavedDoorList; //offset = 1432, size = 12
		String CurrentCareerName; //offset = 1444, size = 12
		SFXSaveGame* CurrentSaveGame; //offset = 1456, size = 4
		SFXSaveGame* ME2ImportSaveGame; //offset = 1460, size = 4
		Bool bCanWriteSaveToStorage: 1; //offset = 1464, size = 4
		Bool bDoneSaving: 1; //offset = 1464, size = 4
		Bool bSavingGame: 1; //offset = 1464, size = 4
		Bool bPlayerNeedsLoad: 1; //offset = 1464, size = 4
		Bool bPlayerLoadPosition: 1; //offset = 1464, size = 4
		Array<String> CorruptedCareers; //offset = 1468, size = 12
		Bool bFlushInputRequested: 1; //offset = 1480, size = 4
		Bool m_bRenderingSuspended: 1; //offset = 1480, size = 4
		Bool m_bInLoad: 1; //offset = 1480, size = 4
		Bool m_bProfileInitialized: 1; //offset = 1480, size = 4
		Bool m_bSavesExistInCurrentCareer: 1; //offset = 1480, size = 4
		Bool m_bSavesExist: 1; //offset = 1480, size = 4
		Bool m_bNGSavesExist: 1; //offset = 1480, size = 4
		String PlayerLoadoutWeapons[6]; //offset = 1484, size = 12
		UniqueNetId m_oInitialPlayerID; //offset = 1556, size = 8
		UniqueNetId m_oProfilePlayerID; //offset = 1564, size = 8
		BlazeDataStore BlazeCache; //offset = 1572, size = 32
		Byte PendingModeToRemove; //offset = 1604, size = 1
		Byte LastSaveGameAction; //offset = 1605, size = 1
		Vector LastSaveGameLocation; //offset = 1608, size = 12
		Int LastSaveGameIndex; //offset = 1620, size = 4
		Int LastDeleteGameIndex; //offset = 1624, size = 4
		Array<DynamicLoadInfo> DynamicLoadMapping; //offset = 1628, size = 12
		Array<PackageRemapInfo> DynamicLoadPackageRemapping; //offset = 1640, size = 12
		Array<Int> AsyncLoadingMapping; //offset = 1652, size = 12
		CorruptCareerWarningText CorruptCareerWarningText; //offset = 1664, size = 4
		ConfirmDeleteCorruptText ConfirmDeleteCorruptText; //offset = 1668, size = 4
		CancelDeleteCorruptText CancelDeleteCorruptText; //offset = 1672, size = 4
		Float LastCantContinueTime; //offset = 1676, size = 4
		srCantContinueErrorMessage srCantContinueErrorMessage; //offset = 1680, size = 4

		void FlushIOHandles();
		void BioShowDebugMessageBox( String sMessage );
		Bool FindCurrentSaveDevice();
		Bool IsCurrentDeviceValid( Int SaveSize, OnlineSubsystem* OnlineSub );
		void ForceGUIUpdate();
		Float GetCurrentTime();
		Float GetPlayTimeSeconds();
		void LoadPlayer();
		Int GetCurrentDevice();
		void UpdateCurrentDevice( Int DeviceID );
		void CheckForCorruptCareers( MassEffectGuiManager* GuiMan, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams Params );
		void ResumeRendering();
		void SuspendRendering();
		void Callback_ConfirmDeleteCorruptCareers( Bool bAPressed, Int Context );
		void ImportME2Character( Bool bChapterSave, Bool bAutoSave, Bool bQuickSave, String CareerName, Int Index );
		void ScanSaves();
		Bool NGSavesExist();
		Bool SavesExist();
		Bool SavesExistInCurrentCareer();
		void ClearSaveCache();
		void CreateCareer( String FirstName, srClass srClass, Byte Origin, Byte Notoriety );
		String ValidCharsFilter( String Sin, Bool bFilterAccentedChars );
		void CacheProfileData( SFXProfileSettings* Profile );
		Bool ReadSaveFromFile( SFXSaveGame* SaveGame, String SavePath );
		void DeleteGame( Int DeleteIndex );
		void LoadGameExternal();
		void LoadGame( Int SlotIndex );
		void ResumeGame();
		void SaveGame( Vector SaveGameLocation, Int SlotIndex );
		Float CurrentSystemTimeSeconds();
		void ReleaseSeekFreeObject( String ObjectName );
		Object* LoadSeekFreeObjectAsync( String Object, Class* ObjectClass, Byte Status );
		Object* LoadSeekFreeObject( String ObjectName, Class* ObjectClass );
		Bool IsSeekFreeObjectSupported( String ObjectName );
		void LaunchUnreaperWithDiscCheck();
		void LaunchUnreaper();
		void ReLaunchExecutable();
		void SkipMovie();
	};

	class SFXGalaxy: public SFXGalaxyMapObject
	{
		DECLARE_PACKAGE_CLASS( SFXGalaxy, SFXGalaxyMapObject, SFXGame )

	public:

		Array<SFXCluster*> Clusters; //offset = 140, size = 12
		Bio2DA* m_pClusterTable; //offset = 152, size = 4
		Bio2DA* m_pRelayTable; //offset = 156, size = 4

		void GetChildren( Array<SFXGalaxyMapObject*> Children );
		void RemoveChild( SFXGalaxyMapObject* Child, SFXCluster* C, Int Index );
		SFXGalaxyMapObject* AddChild(, SFXCluster* newCluster );
		Bool LoadFrom2DA();
	};

	class BioBasePlayerController: public PlayerController
	{
		DECLARE_PACKAGE_CLASS( BioBasePlayerController, PlayerController, SFXGame )

	public:
	};

	const char* SFX_HOTKEY_SLOT_COUNT = 8;
	const char* DefaultInVehicleReason = 3437;
	const char* DefaultNoValidStorageReason = 3437;
	const char* DefaultNotLoggedInReason = 2974;
	const char* DefaultInCombatReason = 1680;
	const char* DefaultNoSaveReason = 1680;

	enum ETutorialHooks
	{
		TUT_Reload,
		TUT_Melee,
		TUT_Zoom,
		TUT_QuickCast,
		TUT_WeaponSwitch,
	};

	struct CameraRotationLog
	{
		Name Trace[10]; //offset = 0, size = 8
		Rotator PrevRot; //offset = 80, size = 12
		Rotator PostRot; //offset = 92, size = 12
	};

	struct BioPPSettingsCallbackData
	{
		Pointer fpCallback; //offset = 0, size = 4
		Pointer pData; //offset = 4, size = 4
	};

	struct SFXHotKeyDefinition
	{
		Name nmPawn; //offset = 0, size = 8
		Int nPowerID; //offset = 8, size = 4
	};

	struct PlayerOrder
	{
		Name nmPower; //offset = 0, size = 8
		Actor* oTarget; //offset = 8, size = 4
		Vector vTarget; //offset = 12, size = 12
		SFXWeapon* oSwitchWeapon; //offset = 24, size = 4
		Vector vOriginalCameraLocation; //offset = 28, size = 12
		Rotator rOriginalCameraRotation; //offset = 40, size = 12
	};

	struct PostProcessInfo
	{
		Byte Preset; //offset = 0, size = 1
		Float Shadows; //offset = 4, size = 4
		Float MidTones; //offset = 8, size = 4
		Float HighLights; //offset = 12, size = 4
		Float Desaturation; //offset = 16, size = 4
	};

	struct BioDamageIndicatorData
	{
		Float fCoolDownTime; //offset = 0, size = 4
	};

	struct BioRadarData
	{
		Int nIndex; //offset = 0, size = 4
		Float fPassTime; //offset = 4, size = 4
		Byte eRadarType; //offset = 8, size = 1
		Vector vPosition; //offset = 12, size = 12
		Int nSize; //offset = 24, size = 4
		Bool bPlayerLockedOn: 1; //offset = 28, size = 4
		Int nRelativeZ; //offset = 32, size = 4
	};

	struct LocalEnemy
	{
		Pawn* Enemy; //offset = 0, size = 4
		Bool bVisible: 1; //offset = 4, size = 4
		Bool bSeen: 1; //offset = 4, size = 4
		Bool bHasLOS: 1; //offset = 4, size = 4
	};

	class BioPlayerController: public BioBasePlayerController
	{
		DECLARE_PACKAGE_CLASS( BioPlayerController, BioBasePlayerController, SFXGame )

	public:
		struct PlayerFlying
		{
			/*
			PlayerMove
			*/
		};

		struct PlayerInCover
		{
			/*
			UpdatePlayerPosture
			DetermineCanMoveInCoverDirection
			PlayerMove
			EndState
			BeginState
			IsInCoverState
			PlayerTick
			BreakFromCover
			*/
		};

		struct PlayerInAimBack
		{
			/*
			PlayerMove
			EndState
			BeginState
			*/
		};

		struct PlayerExitingCover
		{
			/*
			PlayerMove
			EndState
			BeginState
			*/
		};

		struct PlayerDriving
		{
			/*
			NotifyBump
			UpdateRotation
			ServerUse
			EndState
			BeginState
			*/
		};

		struct PlayerWalking
		{
			/*
			PlayerMove
			UpdateRotation
			PlayerMoveCombatOrExplore
			*/
		};

		struct PlayerFalling
		{
			/*
			PlayerMove
			*/
		};


		SFXModule_AimAssist* AimAssist; //offset = 1400, size = 4
		Array<Class*> CustomActionClasses; //offset = 1404, size = 12
		Array<BioCustomAction*> CustomActions; //offset = 1416, size = 12
		SFXProfileSettings* ProfileSettings; //offset = 1428, size = 4
		BioCameraZoom* ZoomData; //offset = 1432, size = 4
		Bool m_bDisableSquadCommandExit: 1; //offset = 1436, size = 4
		Bool bDebugCover: 1; //offset = 1436, size = 4
		Bool m_bEnableStormToCover: 1; //offset = 1436, size = 4
		Bool CoverRespectsRotation: 1; //offset = 1436, size = 4
		Bool m_bCanMantleOutsideOfCover: 1; //offset = 1436, size = 4
		Bool bProfileSettingsUpdated: 1; //offset = 1436, size = 4
		Bool bKismetNoSave: 1; //offset = 1436, size = 4
		Bool m_bRadarArrow: 1; //offset = 1436, size = 4
		Bool bEnableRotLog: 1; //offset = 1436, size = 4
		Float MoveStickIdleThreshold; //offset = 1440, size = 4
		Float MoveStickWalkThreshold; //offset = 1444, size = 4
		Float MoveStickRunThreshold; //offset = 1448, size = 4
		Float DeadZoneThreshold; //offset = 1452, size = 4
		Bool bBreakFromCover: 1; //offset = 1456, size = 4
		Bool m_bDoCoverExitAccel: 1; //offset = 1456, size = 4
		Bool bPreferLeanOverPopup: 1; //offset = 1456, size = 4
		Bool bStorming: 1; //offset = 1456, size = 4
		Bool bTiredStorming: 1; //offset = 1456, size = 4
		Bool bStormCoolingDown: 1; //offset = 1456, size = 4
		Bool m_bIsStoppedForConv: 1; //offset = 1456, size = 4
		Bool m_bDEBUGFlyUpPressed: 1; //offset = 1456, size = 4
		Bool m_bDEBUGFlyDownPressed: 1; //offset = 1456, size = 4
		Bool m_bRadarIsJammed: 1; //offset = 1456, size = 4
		Bool m_bPermanentWalk: 1; //offset = 1456, size = 4
		Vector m_vCoverBreakAccel; //offset = 1460, size = 12
		Float m_fCoverBreakAccelTime; //offset = 1472, size = 4
		Float m_fCoverBreakForwardAccelDelay; //offset = 1476, size = 4
		Float m_fCoverExitTimer; //offset = 1480, size = 4
		Byte m_CoverBreakCoverAction; //offset = 1484, size = 1
		Byte bWantsToStorm; //offset = 1485, size = 1
		Float CoverTransitionTime; //offset = 1488, size = 4
		Float CoverTransitionCountHold; //offset = 1492, size = 4
		Float CoverBreakTimeThreshold; //offset = 1496, size = 4
		Float CoverBreakTimer; //offset = 1500, size = 4
		Float MaxCoverEnterDist; //offset = 1504, size = 4
		Float AcquireCoverFOV; //offset = 1508, size = 4
		Float CoverFOV; //offset = 1512, size = 4
		Float CoverSnapScale; //offset = 1516, size = 4
		Float CoverUpdateDelay; //offset = 1520, size = 4
		Float StormAcquireCoverFOV; //offset = 1524, size = 4
		Float StormCoverFOV; //offset = 1528, size = 4
		Float StormMaxCoverEnterDist; //offset = 1532, size = 4
		Float StormCoverUpdateDelay; //offset = 1536, size = 4
		Float m_fClimbMantleFaceAngleThreshold; //offset = 1540, size = 4
		Float m_fClimbMantleDistanceThreshold; //offset = 1544, size = 4
		Float RemappedJoyRight; //offset = 1548, size = 4
		Float RemappedJoyUp; //offset = 1552, size = 4
		Float RotationSensitivityLow; //offset = 1556, size = 4
		Float RotationSensitivityMedium; //offset = 1560, size = 4
		Float RotationSensitivityHigh; //offset = 1564, size = 4
		Array<LocalEnemy> EnemyList; //offset = 1568, size = 12
		Int NextEnemyToCheckLOS; //offset = 1580, size = 4
		Float CurrentStormStamina; //offset = 1584, size = 4
		Float StormCooldownTime; //offset = 1588, size = 4
		String StormRTPCName; //offset = 1592, size = 12
		WwiseEvent* StormStartWwiseEvent_M; //offset = 1604, size = 4
		WwiseEvent* StormPeakWwiseEvent_M; //offset = 1608, size = 4
		WwiseEvent* StormStartWwiseEvent_F; //offset = 1612, size = 4
		WwiseEvent* StormPeakWwiseEvent_F; //offset = 1616, size = 4
		WwiseEvent* StormEndWwiseEvent; //offset = 1620, size = 4
		KismetNoSaveReason KismetNoSaveReason; //offset = 1624, size = 4
		ProfileChangedText ProfileChangedText; //offset = 1628, size = 4
		ProfileSignOutText ProfileSignOutText; //offset = 1632, size = 4
		ConfirmSignOutText ConfirmSignOutText; //offset = 1636, size = 4
		StorageDeviceRemovedText StorageDeviceRemovedText; //offset = 1640, size = 4
		RestartGame RestartGame; //offset = 1644, size = 4
		InsufficentSpaceText InsufficentSpaceText; //offset = 1648, size = 4
		InsufficentSpaceAcknowledgedText InsufficentSpaceAcknowledgedText; //offset = 1652, size = 4
		BioHintSystemBase* HintSystem; //offset = 1656, size = 4
		Float m_fLeaveConvPitch; //offset = 1660, size = 4
		Float m_fMoveToDropDistance; //offset = 1664, size = 4
		BioPlayerSelection* m_oPlayerSelection; //offset = 1668, size = 4
		Array<BioPawn*> m_AchievementTargets; //offset = 1672, size = 12
		Float m_fMaxZDifference; //offset = 1684, size = 4
		Float m_fRelativeZUpLimit; //offset = 1688, size = 4
		Float m_fRelativeZDownLimit; //offset = 1692, size = 4
		Float m_fLastRadarPassTime; //offset = 1696, size = 4
		Float m_fLastRadarRange; //offset = 1700, size = 4
		Float m_fRadarRange; //offset = 1704, size = 4
		Float m_fRadarFOV; //offset = 1708, size = 4
		Float m_fLastRadarFOV; //offset = 1712, size = 4
		Map_Mirror m_RadarDataMap; //offset = 1716, size = 20
		Vector m_vLocationRadarArrowPointsTo; //offset = 1736, size = 12
		BioRadarMapBoundaries* m_oRadarMapBoundary; //offset = 1748, size = 4
		Array<Int> m_anRecoveredRadarIndexes; //offset = 1752, size = 12
		Int m_nMaxRadarIndex; //offset = 1764, size = 4
		Array<Int> m_anDestroyedPawnIndexesToRecover; //offset = 1768, size = 12
		Array<Actor*> m_aoPotentialRadarObjects; //offset = 1780, size = 12
		Array<BioRadarMapBoundaries*> m_aoMapBoundaryObjects; //offset = 1792, size = 12
		Vector AimDirection; //offset = 1804, size = 12
		Vector m_vNavAssistPoint; //offset = 1816, size = 12
		Int m_nNavAssistMaxNodeLimit; //offset = 1828, size = 4
		Byte bBoost; //offset = 1832, size = 1
		Byte bJump; //offset = 1833, size = 1
		Byte bAlternateCamera; //offset = 1834, size = 1
		Byte bMine; //offset = 1835, size = 1
		Float m_fDamageIndicatorDisplayTime; //offset = 1836, size = 4
		Array<Pawn*> m_aoDamageCausers; //offset = 1840, size = 12
		Map_Mirror m_DamageIndicatorDataMap; //offset = 1852, size = 20
		Array<PostProcessInfo> PostProcessPresets; //offset = 1872, size = 12
		m_srVehicleExitFailureMsg m_srVehicleExitFailureMsg; //offset = 1884, size = 4
		m_srVehicleExitAButtonMsg m_srVehicleExitAButtonMsg; //offset = 1888, size = 4
		SFXGameModeManager* GameModeManager2; //offset = 1892, size = 4
		PlayerOrder m_currentOrder; //offset = 1896, size = 52
		SFXHotKeyDefinition m_aHotKeyDefines[8]; //offset = 1948, size = 12
		Int lstHotKeyPawns[12]; //offset = 2044, size = 4
		Int lstHotKeyEvents[12]; //offset = 2092, size = 4
		Array<BioPPSettingsCallbackData> m_aPPCallbacks; //offset = 2140, size = 12
		Float m_fAttackOrderFarAngle; //offset = 2152, size = 4
		Float m_fAttackOrderCloseAngle; //offset = 2156, size = 4
		Float m_fAttackOrderCloseDistance; //offset = 2160, size = 4
		Array<StaticKeyBind> m_aFlyCamPCBinds; //offset = 2164, size = 12
		Array<StaticKeyBind> m_aFlyCamConsoleBinds; //offset = 2176, size = 12
		Int RotLogCursor; //offset = 2188, size = 4
		Array<CameraRotationLog> RotLog; //offset = 2192, size = 12

		Float GetRadarFOV();
		Float GetRadarRange();
		BioPawn* GetBioPawn();
		Byte GetLoginStatus(, LocalPlayer* LP );
		void HandleWalking();
		void PostControllerIdChange( SFXEngine* Engine, LocalPlayer* LP );
		Bool IsLookInputIgnored();
		void UpdateInputConfiguration( SFXPRI* PRI );
		void LoadPCInputConfiguration();
		void SavePCInputConfiguration( SFXProfileSettings* Profile );
		void UpdateLocalProfileSettingsCache( SFXPRI* PRI, SFXGame* Game, Int PlayerIndex, LocalPlayer* LP );
		Bool CanRestartPlayer();
		void EnableFilmgrain( Bool bEnable );
		void EnableMotionBlur( Bool bEnable );
		Bool HasCompletedAchievement( Byte AchievementId );
		void UpdateHeavyWeaponKill( Class* DamageType );
		void UpdateAchievementProgression( Byte AchievementId, BioPawn* oTarget );
		void UnlockAchievement( Byte AchievementId, LocalPlayer* LP, AchievementData AD, Int PlatformAchievementId, GrinderAchievement GrinderData );
		void NotifyReadAchievementsComplete( Int TitleId, PlayerIntEx PlayerIntEx, Int ControllerId, Array<AchievementDetails> AchievementsList );
		void UpdateProfileData( PlayerInterface PlayerInterface, PlayerIntEx PlayerIntEx, SFXEngine* Engine, Int ControllerId, Array<AchievementDetails> Achievements );
		void NotifyProfileReadComplete( Byte LocalUserNum, Bool bWasSuccessful );
		void CheckThatGameCanContinue( SFXEngine* Engine, BioMessageBoxOptionalParams stParams, Bool bSplashScreen, Bool bSaveDeviceRemoved, LocalPlayer* LocPlayer, UniqueNetId NewPlayerID, UniqueNetId ZeroId, NewErrorString NewErrorString );
		void StorageDeviceChanged();
		Bool DownloadableContentWasRemoved();
		void Callback_PlayerLoggedOut( Bool bAPressed, Int Context );
		void NotifyLoginChange( WorldInfo* oWorld );
		void ClearOnlineDelegates( PlayerInterface PlayerInterface, LocalPlayer* LocPlayer );
		void RegisterOnlineDelegates( PlayerInterface PlayerInterface, LocalPlayer* LocPlayer, MassEffectGuiManager* GuiMan );
		void SaveProfile( LocalPlayer* LP, PlayerInt PlayerInt, Int ControllerId, BioPawn* MyBP );
		void Helper_OverwriteGame( Int DeleteIndex, Int SaveIndex, SFXEngine* Engine );
		Bool OverwriteGame( Int DeleteIndex, Int SaveIndex, SFXEngine* Engine, BioSFHandler_MessageBox* oInsufficientSpaceMsgBox, BioMessageBoxOptionalParams stParams, Bool retval );
		void Helper_DeleteGame( Bool bAutoSave, Int DeleteIndex, String CareerName, SFXEngine* Engine );
		void DeleteGame( Bool bAutoSave, Int DeleteIndex, String CareerName, SFXEngine* Engine );
		void Helper_LoadGame( Bool bChapterSave, Bool bAutoSave, Bool bQuickSave, String CareerName, Int LoadIndex, SFXEngine* Engine );
		void LoadGame( Bool bChapterSave, Bool bAutoSave, Bool bQuickSave, String CareerName, Int LoadIndex, SFXEngine* Engine, Name nmStreamingChunk );
		void Helper_SaveGame( Int SaveIndex, SFXEngine* Engine );
		Bool SaveGame( Int SaveIndex, SFXEngine* Engine, Name nmStreamingChunk, BioSFHandler_MessageBox* oInsufficientSpaceMsgBox, BioMessageBoxOptionalParams stParams, Bool retval );
		void QuickLoad( SFXEngine* Engine );
		void QuickSave( SFXEngine* Engine, String Reason );
		Bool CanSave( String Reason, PlayerInterface PlayerInterface, Byte PlayerID, SFXGame* GameInfo, SFXEngine* Engine );
		void SetDeviceID( Int nID, SFXEngine* Engine );
		void PreClientTravel();
		Float GetSensitivityScaling(, SFXPRI* PRI, Float Multiplier );
		void SetCinematicMode( Bool bInCinematicMode, Bool bHidePlayer, Bool bAffectsHUD, Bool bAffectsMovement, Bool bAffectsTurning, Bool bAffectsButtons, Int Cnt, BioPawn* pPawn, SFXAI_NativeBase* pAI, BioWorldInfo* pBWI );
		void GenerateTutorialEvent( Byte eTutHook, SFXGame* oGame, Int idx, Array<SequenceObject*> Events, SFXSeqEvt_Tutorial* tutorialEvent );
		void QueueDamageIndicator( Pawn* oPawn );
		void DebugDraw_CoverCheck( BioHUD* HUD, Float fMaxDistance, Vector vDir, Vector vLoc, Float fFov, Float fAngle, Color clrCone );
		void CheckStormToCover();
		Float GetMaxCoverEnterDist();
		Float GetCoverFOV();
		Float GetAcquireCoverFOV();
		void PlayLocationBasedForceFeedback( Vector ImpactLocation, ForceFeedbackWaveform* ForceFeedback, Float MinShakeDistance, Float MinShakeMultiplier, BioPlayerController* pController, Float fPlayerDistanceToImpact, Float fForceFeedbackMult, ForceFeedbackWaveform* ModifiedForceFeedback, WaveformSample Sample );
		void PlayLocationBasedCameraShake( Vector ImpactLocation, ScreenShakeStruct CameraShake, Float MinShakeDistance, Float MinShakeMultiplier, BioPlayerController* pController, Float fPlayerDistanceToImpact, Float fCameraShakeMult, ScreenShakeStruct ModifiedCameraShake );
		void CameraShake( Float Duration, Vector newRotAmplitude, Vector newRotFrequency, Vector newLocAmplitude, Vector newLocFrequency, Float newFOVAmplitude, Float newFOVFrequency, ScreenShakeStruct Shake );
		Bool IsReloading(, BioPawn* BioPawn );
		void SetZoomed( Bool bZoomState, SFXWeapon* Weapon );
		Bool IsZoomed();
		Bool IsPlayerPerformingBlockingAction(, BioPawn* oPawn );
		void CancelLastOrderedPower( Pawn* oOrderedPawn, Name nmPower, SFXAI_Henchman* oController );
		Bool CanRunQueuedOrder();
		void ClearPlayerOrder();
		void SwitchWeapon( SFXWeapon* oWpn, SFXInventoryManager* oInventory, BioPawn* PlayerPawn );
		Bool CanStartImmediateOrder();
		Bool CanQueueOrder();
		void OrderWeaponSwitch( Pawn* oOrderedPawn, SFXWeapon* Wpn, SFXAI_Henchman* oController );
		void GiveHenchmanOrder( Pawn* oHenchman, Byte eOrder, Actor* oTargetActor, Vector vTargetLocation, Name nmPower, SFXWeapon* oWpn, Int nQueue, SFXAI_Henchman* oController );
		void HenchmanOrderHoldPosition( Pawn* oHenchman, Vector vLocation );
		void HenchmanOrderFollow( Pawn* oHenchman );
		void HenchmanOrderAttackTarget( Pawn* oHenchman, Actor* oTargetActor );
		void HenchmanOrderUsePower( Pawn* oHenchman, Actor* oTargetActor, Vector vTargetLocation, Name nmPower, Int nQueue );
		Bool GetHenchmanAttackOrderPower( Pawn* oHenchman, Actor* oTarget, Name nmPowerName, SFXPawn_Henchman* oPawn, SFXAI_Henchman* oController, SFXPower* oPower, Int nRequiresAttackTicket, Vector AttackOrigin );
		void ProxyOnControllerChanged( Int ControllerId, Bool bIsConnected );
		void ResetStormCooldown();
		void OnTeleportCameraSync( SeqAct_Teleport* Action, Array<Object*> objVars, Int idx, Actor* destActor, Int nYawDiff );
		void SpawnPlayerCamera();
		void InitializeGammaCorrectionSettings();
		void SetPostProcessValues( Byte Preset );
		Class* GetSaveObjectClass();
		void GrantXP( Float XP, Bool bSkipNotify, Float XPGained, Int MaxExperience, SFXPRI* PRI, SFXPawn_Player* PlayerPawn );
		void UnPossess();
		void Possess( Pawn* aPawn, Bool bVehicleTransition, BioTriggerStream* V, BioPlayerSquad* PlayerSquad, BioPawn* oBioPawn, BioWorldInfo* oBioWorldInfo );
		void ToggleFlyCamControl( SFXPlayerCamera* man, BioCameraBehaviorFree* oFreeBehav );
		void ToggleSlowFlyCam( SFXPlayerCamera* TheCamera );
		void ToggleFlyCam();
		Rotator GetAdjustedAimFor( Weapon* W, Vector StartFireLoc );
		void UpdateCover();
		void UpdateEnemyList();
		Bool IsUsingPower(, BioPawnBehavior* Behavior );
		Bool CanDoCustomAction( Byte CAction );
		Bool GetCurrentCustomAction( BioCustomAction* Action );
		void AcquireCover( CovPosInfo CovInfo, BioPawn* BioPawn );
		Bool CanPerformMantle( CovPosInfo CoverInfo );
		Bool CanPerformClimb( CovPosInfo CoverInfo );
		Bool CanPerformEnterCover();
		Bool ValidatePotentialCover( Vector SourceLoc, Vector Direction, Bool OnlyIfBetter, Float OutMinDotFOV, Float OutMaxDistanceSquared, CovPosInfo OutCovPosInfo );
		void FillCoverPosInfo( CoverLink* Link, Int SlotIdx, Vector SourceLoc, Vector Direction, Float MaxDistance, CovPosInfo out_CovPosInfo );
		Bool FindPlayerCover( CovPosInfo out_CovPosInfo, Bool bUseRotation );
		Bool TryAcquireCover(, BioPawn* BioPawn, CovPosInfo FoundCover, Bool bFindCoverPassed, BioRemoteLogger* GLogger );
		void NotifyCoverDisabled( CoverLink* Link, Int SlotIdx, BioPawn* MyPawn );
		void NotifyReachedCoverSlot( Int SlotIdx, Int OldSlotIdx, BioPawn* BioPawn, CoverLink* Link, CoverSlot Slot );
		void SetIsInStationaryCover( Bool bIsInStationaryCover, BioPawn* BioPawn );
		Byte GetPawnCoverType(, BioPawn* BioPawn );
		void SetPawnCoverType( Byte NewCoverType, BioPawn* BioPawn );
		Byte GetPawnCoverAction(, BioPawn* BioPawn );
		void SetPawnCoverAction( Byte NewCoverAction, BioPawn* BioPawn );
		Byte GetCoverDirection(, BioPawn* BioPawn );
		void SetCoverDirection( Byte NewCoverDirection, BioPawn* BioPawn );
		void LeaveCover( BioPawn* BioPawn );
		void CoverLog( String msg, String Function );
		Bool IsInCoverState();
		void EnableTransitions();
		void BreakFromCover();
		Bool IsCameraAlignedWithCoverSlot( Float fThreshold, BioPawn* BioPawn, Vector vSlotDir, Vector vCamDir );
		void DetermineLeanDirection( BioPawn* BioPawn, CoverSlot CurrentSlot, Byte out_PawnCA, Byte out_PawnCD );
		void PawnLanded();
		void PawnFalling();
		void PawnDied( Pawn* inPawn, BioPawn* BioPawn );
		void ApplyTacticalOrders( BioPawn* PlayerPawn, BioPlayerInput* Input );
		Bool CanStorm();
		Bool IsExploreTargetable( Actor* A );
		Bool IsCombatTargetable( Actor* A );
		void RefreshRadarData();
		void PostBeginPlay();
		Bool UpdateMoveToIndicator( Pawn* pSquadPawn, Vector vMoveToPosition );
		DOFEffect* FindUberDOFEffect();
		void OnExitedCover();
		void OnEnteredCover();
		Bool GetInputDisabled(, BioPlayerInput* oInput );
		void SetInputDisabled( Bool bVal, BioPlayerInput* oInput );
		void ActivateMelee( BioPlayerInput* Input, SFXWeapon* SW );
		Bool GetZoomSnapWeaponInfo( Weapon* Weapon, Int idx, Byte AimNode, Float OuterSnapAngle, Float InnerSnapAngle, Float OffsetMag, SFXWeapon* ChkWeapon );
		Pawn* GetZoomSnapTarget( Float MinDistance, Float MaxDistance, Vector AimLocation );
		Pawn* GetAimAssistTarget( Float MaxDistance, Vector CamLoc, Rotator CamRot, Vector TargetLoc, Float Margin );
		Float ScoreZoomSnapTarget( Pawn* TestPawn, Float MaxDistance, Vector CamLoc, Rotator CamRot, Vector AimLocation );
		Int LerpMovementStickAngle( Int RotDesired, Int RotBase, Float RotationSpeed, Float DeltaSeconds );
		void ComputeMovementStickAngle( Float mag, Float AngleStick, Rotator RotWorld );
		Bool GetCameraRelativeRotation( Vector vDirection );
		void OnActionStateChanged();
		void BioOnPawnActionStateChanged();
		void ResetGoalPriorities( SFXNav_GoalPoint* oGoal );
		SFXNav_GoalPoint* GetBestGoalPoint();
		void SquadOrderEquipWeapon( Byte nWeapon, Pawn* pPawn );
		void SquadOrderUsePower( Name nmPower, Pawn* pPawn, Int nQueue, Bool bShowIndicator, Actor* pDesiredTarget );
		Bool ShouldLockOnTarget( Actor* pTarget );
		Bool QuickCommandMoveTo( Int nSquadIndex );
		Bool QuickCommandAttackTarget( Int nSquadIndex );
		Bool QuickCommandFollowPlayer( Int nSquadIndex );
		void PlayerSquadSetActionState( Byte eState );
		void Destroyed( MassEffectGuiManager* GuiMan );
		void UpdateBinkAudioVolume();
		void DisableDOF();
		void RecoverForPlayerPawnActionState();
		void RecoverSelectionForPawnActionState();
		void RecoverCameraForPawnActionState();
		void RecoverCameraPostCinematic();
		void DrawSelectionReticle( Vector vLocation );
		void DrawCircle( Vector vLocation, Vector vNormal, Float fRadius, Color CircleColor );
		void UnregisterPlayerDataStores();
		void RegisterCustomPlayerDataStores( LocalPlayer* LP );
		void DumpWhipLog( Int Index );
		Bool SetRotation( Rotator NewRotation );
	};

	enum EGameModePriority2
	{
		ModePriority_Base,
		ModePriority_CheatMenu,
		ModePriority_Conversation,
	};

	class SFXGameModeBase: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeBase, Object, SFXGame )

	public:

		Array<KeyBind> Bindings; //offset = 60, size = 12
		Bool bBindingsCollected: 1; //offset = 72, size = 4
		Bool bIsActive: 1; //offset = 72, size = 4
		Bool bShowHUD: 1; //offset = 72, size = 4
		Bool bShowSelection: 1; //offset = 72, size = 4
		Bool bShowDamageIndicators: 1; //offset = 72, size = 4
		Bool bShowRadar: 1; //offset = 72, size = 4
		Bool bAllowRotationUpdate: 1; //offset = 72, size = 4
		Bool bAllowMovement: 1; //offset = 72, size = 4
		Bool bAllowCamera: 1; //offset = 72, size = 4
		Bool bAllowCameraMods: 1; //offset = 72, size = 4
		Bool bAllowSave: 1; //offset = 72, size = 4
		Bool bAllowPauseMenu: 1; //offset = 72, size = 4
		Bool bShowSubtitle: 1; //offset = 72, size = 4
		Bool bHasMouseAuthority: 1; //offset = 72, size = 4
		Bool bMouseVisible: 1; //offset = 72, size = 4
		Bool bMergeNotifications: 1; //offset = 72, size = 4
		Bool bQueueAndSuppressNotifications: 1; //offset = 72, size = 4
		Bool bShowReticles: 1; //offset = 72, size = 4
		Bool bPlayVocalizations: 1; //offset = 72, size = 4
		Bool bEnforce16x9Subtitiles: 1; //offset = 72, size = 4
		Array<KeyBind> LocalizedBindings; //offset = 76, size = 12
		Byte Priority; //offset = 88, size = 1

		void TurnObjectiveRadarDisplayOff();
		void TurnObjectiveRadarDisplayOn();
		void ToggleObjectiveRadarDisplay( Bool bTurnOn, MassEffectGuiManager* GUIManager );
		void PulseRadarDisplay( Float fPulseTime, MassEffectGuiManager* GUIManager );
		void UnpauseTimeDilationEffects( SFXModule_GameEffectManager* Manager );
		void PauseTimeDilationEffects( SFXModule_GameEffectManager* Manager, SFXGame* Game );
		void RemoveTimeDilationEffects( SFXModule_GameEffectManager* Manager, SFXGame* Game );
		void GuiKey( Byte Event );
		void LeaveWorld( SFXGame* Game, Sequence* GameSeq, Array<SequenceObject*> AllLeaveEvents, SequenceObject* Event );
		void StartIngamePropertyEditor( BioWorldInfo* oBWI, Bool bRetval );
		void SquadCommand_Move2( Bool bSuccess );
		void SquadCommand_Move1( Bool bSuccess );
		void SquadCommand_Follow( Bool bSuccess );
		void SquadCommand_Attack( Bool bSuccess );
		void ShowMenu();
		void StopFiringWeapon();
		void SwapWeaponIfEmpty( SFXWeapon* Weapon );
		void FireWeapon( BioPawn* ChkPawn );
		void CollectBindings();
		void Initialize();
		void DeactivateSpecifier( Name ModeSpecifier );
		void ActivateSpecifier( Name ModeSpecifier );
		void Deactivated();
		void Activated();
		void ClearTimer( Name inTimerFunc, Object* inObj );
		void SetTimer( Float InRate, Bool inbLoop, Name inTimerFunc, Object* inObj );
		SFXCameraMode* HACK_GetCameraMode();
		SFXCameraMode* GetCameraMode( SFXCameraMode* OldCameraMode, Int PreserveTarget, Float TransitionTime, SFXCameraMode_Interpolate* Transition );
	};

	enum EGameModes
	{
		GameMode_Default,
		GameMode_PowerWheel,
		GameMode_WeaponWheel,
		GameMode_Command,
		GameMode_Vehicle,
		GameMode_Conversation,
		GameMode_Cinematic,
	};

	struct LocalizedKeyName
	{
		Name Key; //offset = 0, size = 8
		Name Name; //offset = 8, size = 4
	};

	class SFXGameModeManager: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeManager, Object, SFXGame )

	public:

		Array<Class*> SupportedModes; //offset = 60, size = 12
		Array<SFXGameModeBase*> GameModes; //offset = 72, size = 12
		Byte CurrentMode; //offset = 84, size = 1
		Array<LocalizedKeyName> KeyNames; //offset = 88, size = 12
		String sAudioGameModeRTPCName; //offset = 100, size = 12

		void ResetKeyPresses();
		void ResetBindings();
		Bool ShouldEnforce16x9Subtitiles();
		Bool ShouldPlayVocalizations();
		Bool ShouldShowReticles();
		Bool ShouldQueueAndSuppressNotifications();
		Bool ShouldMergeNotifications();
		Bool GetMouseVisible();
		Bool HasMouseAuthority();
		Bool ShouldShowSubtitles();
		Bool AllowsSaving();
		Bool AllowsCameraMods();
		Bool AllowRotationUpdates();
		Bool ShouldShowRadar();
		Bool ShouldShowDamageIndicators();
		Bool ShouldShowSelection();
		Bool ShouldShowHUD();
		Bool IsActive( Byte Mode );
		void UpdateCurrentMode();
		void Initialize();
		SFXCameraMode* HACK_GetCameraMode( Byte GalaxyOrConversationMode );
		void HACK_BeginExitGalaxyMap( Bool resize );
		Bool HACK_CanExitGalaxyMode();
		SFXGameModeBase* HACK_GetOrbitalMode();
		void Console_UpdateTriggerBindings( Byte ConfigOption, SFXGameModeBase* Mode, Int ModeType );
		void Console_UpdateStickBindings( Byte ConfigOption, SFXGameModeBase* Mode, Int ModeType );
		void Helper_ResetStaticConsoleBindings( BioPlayerInput* Input );
		void Helper_SetStaticConsoleBinding( Name Key, String Command, Int idx, StaticKeyBind NewBind, BioPlayerInput* Input );
		void Helper_SetBinding( SFXGameModeBase* Mode, Name Key, String Command, Int idx, KeyBind NewBind );
		SFXCameraMode* GetCameraMode( SFXCameraMode* OldCameraMode, Int PreserveTarget, Float TransitionTime, SFXCameraMode_Interpolate* Transition );
		void DisableMode( Byte Mode, Name ModeSpecifier, SFXGameModeBase* GameMode );
		void EnableMode( Byte Mode, Name ModeSpecifier, SFXGameModeBase* GameMode );
	};

	struct PowerLevelUp
	{
		Class* PowerClass; //offset = 0, size = 4
		Float Rank; //offset = 4, size = 4
		Class* EvolvedPowerClass; //offset = 8, size = 4
	};

	struct ShieldLoadout
	{
		Class* Shields; //offset = 0, size = 4
		Vector2D ShieldLevelRange; //offset = 4, size = 8
		Vector2D MaxShields; //offset = 12, size = 8
	};

	class SFXLoadoutData: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXLoadoutData, Object, SFXGame )

	public:

		Bool bEditableWeapons: 1; //offset = 60, size = 4
		Array<Class*> Weapons; //offset = 64, size = 12
		Vector2D WeaponLevelRange; //offset = 76, size = 8
		Class* Armor; //offset = 84, size = 4
		Vector2D ArmorLevelRange; //offset = 88, size = 8
		Array<Class*> Shields; //offset = 96, size = 12
		Vector2D ShieldLevelRange; //offset = 108, size = 8
		Float ShieldScale; //offset = 116, size = 4
		Vector ShieldOffset; //offset = 120, size = 12
		Vector2D MaxShields; //offset = 132, size = 8
		Array<ShieldLoadout> ShieldLoadouts; //offset = 140, size = 12
		Vector2D MaxHealth; //offset = 152, size = 8
		Vector2D HealthLevelRange; //offset = 160, size = 8
		Float TechResistance; //offset = 168, size = 4
		Float BioticResistance; //offset = 172, size = 4
		Array<Class*> Powers; //offset = 176, size = 12
		Array<PowerLevelUp> PowerLevelUpInfo; //offset = 188, size = 12
	};

	class SFXModule_Radar: public SFXModule
	{
		DECLARE_PACKAGE_CLASS( SFXModule_Radar, SFXModule, SFXGame )

	public:

		Byte RadarType; //offset = 68, size = 1
		Bool bRadarDisabled: 1; //offset = 72, size = 4

		void PostBeginPlay();
	};

	class SFXMovementData: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXMovementData, Object, SFXGame )

	public:

		Float WalkSpeed; //offset = 60, size = 4
		Float GroundSpeed; //offset = 64, size = 4
		Float TurnSpeed; //offset = 68, size = 4
		Float CombatWalkSpeed; //offset = 72, size = 4
		Float CombatGroundSpeed; //offset = 76, size = 4
		Float DeathCrawlSpeed; //offset = 80, size = 4
		Float CoverGroundSpeed; //offset = 84, size = 4
		Float CoverCrouchGroundSpeed; //offset = 88, size = 4
		Float CrouchGroundSpeed; //offset = 92, size = 4
		Float StormSpeed; //offset = 96, size = 4
		Float StormTurnSpeed; //offset = 100, size = 4
		Float AirSpeed; //offset = 104, size = 4
		Float AccelRate; //offset = 108, size = 4
	};

	class SFXNav_ForcedPathNode: public NavigationPoint
	{
		DECLARE_PACKAGE_CLASS( SFXNav_ForcedPathNode, NavigationPoint, SFXGame )

	public:

		Float m_fForcedRadius; //offset = 776, size = 4
		Float m_fForcedHeight; //offset = 780, size = 4
	};

	class SFXNav_GoalPoint: public NavigationPoint
	{
		DECLARE_PACKAGE_CLASS( SFXNav_GoalPoint, NavigationPoint, SFXGame )

	public:

		Bool m_bIsFinalGoal: 1; //offset = 776, size = 4
		Int m_nPriority; //offset = 780, size = 4
		Int m_nOverridePriority; //offset = 784, size = 4

		Int GetPriority();
		void ResetPriority();
		void OverridePriority( Int nNewPriority );
	};

	const char* MAX_GOALEVALUATORS = 3;
	const char* MAX_INSTANCES_PER_CLASS = 3;
	const char* NUM_CONSTRAINT_CLASSES = 11;
	const char* MAX_WwiseAC = 20;
	const char* MAX_PSCS = 15;
	const char* MAX_TRACERS = 15;

	struct SFXObjectPoolPathConstraintCaches
	{
		Int ListIdx; //offset = 0, size = 4
		PathConstraint* List[3]; //offset = 4, size = 4
	};

	struct SFXObjectPoolEmitters
	{
		ParticleSystem* Template; //offset = 0, size = 4
		Array<Emitter*> Emitters; //offset = 4, size = 12
		Int NextIdx; //offset = 16, size = 4
	};

	struct SFXObjectPoolPSCs
	{
		ParticleSystem* Template; //offset = 0, size = 4
		Array<ParticleSystemComponent*> PSysComponents; //offset = 4, size = 12
		Int NextIdx; //offset = 16, size = 4
	};

	struct SFXObjectPoolImpactPSCs
	{
		ParticleSystem* Template; //offset = 0, size = 4
		ParticleSystemComponent* PSysComponents[15]; //offset = 4, size = 4
		Int NextIdx; //offset = 64, size = 4
	};

	struct SFXObjectPoolDroppedAmmos
	{
		Class* DroppedAmmoClass; //offset = 0, size = 4
		Array<DroppedPickup*> DroppedAmmos; //offset = 4, size = 12
		Int NextIdx; //offset = 16, size = 4
	};

	struct SFXObjectPoolProjectiles
	{
		Class* ProjectileClass; //offset = 0, size = 4
		Array<Projectile*> Projectiles; //offset = 4, size = 12
		Int NextIdx; //offset = 16, size = 4
	};

	struct SFXObjectPoolTracers
	{
		StaticMesh* Mesh; //offset = 0, size = 4
		ParticleSystem* Template; //offset = 4, size = 4
		Projectile* Tracers[15]; //offset = 8, size = 4
		Int NextIdx; //offset = 68, size = 4
	};

	class SFXObjectPool: public Actor
	{
		DECLARE_PACKAGE_CLASS( SFXObjectPool, Actor, SFXGame )

	public:

		Array<SFXObjectPoolTracers> TracerPool; //offset = 508, size = 12
		Array<SFXObjectPoolProjectiles> ProjectilePool; //offset = 520, size = 12
		Array<SFXObjectPoolDroppedAmmos> DroppedPool; //offset = 532, size = 12
		Array<SFXObjectPoolImpactPSCs> ImpactPSCPool; //offset = 544, size = 12
		Array<SFXObjectPoolPSCs> GenericPSCPool; //offset = 556, size = 12
		Array<SFXObjectPoolEmitters> EmitterPool; //offset = 568, size = 12
		WwiseAudioComponent* WwiseACPool[20]; //offset = 580, size = 4
		Int WwiseNextIdx; //offset = 660, size = 4
		Array<SFXObjectPoolPathConstraintCaches> PathConstraintCache; //offset = 664, size = 12
		Array<PathGoalEvaluator*> PathGoalEvaluatorCache; //offset = 676, size = 12

		void DumpPools();
		PathGoalEvaluator* GetPathGoalEvaluatorFromCache( Class* GoalEvalClass, Pawn* Requestor, Int CacheIdx, PathGoalEvaluator* ChosenEval );
		PathConstraint* GetPathConstraintFromCache( Class* ConstraintClass, Pawn* Requestor, Int CacheIdx, SFXObjectPoolPathConstraintCaches PDC, PathConstraint* ChosenConstraint );
		void CleanupPathConstraints();
		void CreatePathConstraintCache();
		WwiseAudioComponent* GetWwiseAudioComponent();
		Emitter* GetImpactEmitter( ParticleSystem* Template, Vector SpawnLocation, Rotator SpawnRotation );
		void PrecacheImpactEmitter( ParticleSystem* Template );
		void ReusePooledEmitter( Emitter* Emit, SFXEmitter* SFXEmit );
		Emitter* CreatePooledEmitter( ParticleSystem* Template, SFXEmitter* SFXEmit );
		ParticleSystemComponent* GetGenericParticleSystemComponent( ParticleSystem* Template );
		void PrecacheGenericParticleSystemComponent( ParticleSystem* Template );
		ParticleSystemComponent* GetImpactParticleSystemComponent( ParticleSystem* Template );
		void PrecacheImpactParticleSystemComponent( ParticleSystem* Template );
		DroppedPickup* GetDroppedAmmo( Class* DroppedAmmoClass, Vector SpawnLocation );
		void ReusePooledDroppedAmmo( DroppedPickup* Dropped, SFXDroppedAmmo* SFXDrop );
		DroppedPickup* CreatePooledDroppedAmmo( Class* DroppedAmmoClass, Vector SpawnLocation, SFXDroppedAmmo* SFXDrop );
		Projectile* GetProjectile( Class* ProjectileClass, Actor* ProjOwner, Pawn* ProjInstigator, Vector ProjLocation, Rotator ProjRotation );
		void ReusePooledProjectile( Projectile* Proj, SFXProjectile* SFXProj );
		Projectile* CreatePooledProjectile( Class* ProjClass, Vector SpawnLocation, SFXProjectile* SFXProj );
		Projectile* GetTracer( StaticMesh* Mesh, ParticleSystem* Template );
		void PrecacheTracer( StaticMesh* Mesh, ParticleSystem* Template );
		void ReusePooledTracer( Projectile* Proj, SFXTracer_Bullet* Tracer );
		Projectile* CreatePooledTracer( StaticMesh* Mesh, ParticleSystem* Template, Vector SpawnLocation, SFXTracer_Bullet* Tracer, StaticMeshComponent* SMC );
		void ApplyBloodColor( ParticleSystemComponent* PSC, Actor* HitActor );
		void ApplyLODLevel( ParticleSystemComponent* PSC, Vector EffectLocation );
		void AttachParticleSystemComponent( ParticleSystemComponent* PSC, Actor* HitActor, PrimitiveComponent* HitComponent, Name HitBone, Vector HitLocation, Vector HitNormal, Bool bStaticLocation );
	};

	enum ESFXPlanetFeatureEventTransitionAutoSet
	{
		SFXPlanetFeatureEventTransition_Unset,
	};

	enum ESFXPlanetFeatureEventTransitionPlotAutoSet
	{
		SFXPlanetFeatureEventTransitionPlot_Unset,
	};

	class SFXPlanetFeature: public SFXGalaxyMapObject
	{
		DECLARE_PACKAGE_CLASS( SFXPlanetFeature, SFXGalaxyMapObject, SFXGame )

	public:

		Byte FeatureType; //offset = 140, size = 1
		Byte MineralType; //offset = 141, size = 1
		Byte FeatureTransitionRegion; //offset = 142, size = 1
		Byte FeatureTransitionPlot; //offset = 143, size = 1
		Byte FeatureTransitionName; //offset = 144, size = 1
		Float Amount; //offset = 148, size = 4
		Int FeatureTransition; //offset = 152, size = 4
		Int FeatureTransitionParameter; //offset = 156, size = 4
		WwiseBaseSoundObject* StartEvent; //offset = 160, size = 4
		WwiseBaseSoundObject* StopEvent; //offset = 164, size = 4
		String RTPCName; //offset = 168, size = 12
		Vector Position; //offset = 180, size = 12
		ParticleSystemComponent* ParticleComponent; //offset = 192, size = 4
		Int ScaledAmount; //offset = 196, size = 4
	};

	enum ELoadoutWeapons
	{
		LoadoutWeapons_AssaultRifles,
		LoadoutWeapons_Shotguns,
		LoadoutWeapons_SniperRifles,
		LoadoutWeapons_AutoPistols,
	};

	struct SpecialWeaponInfo
	{
		Name WeaponClassName; //offset = 0, size = 8
		Name HenchmanClassName; //offset = 8, size = 8
		Name UnlockPlotName; //offset = 16, size = 8
	};

	struct BonusWeaponInfo
	{
		Byte WeaponClass; //offset = 0, size = 1
		Name UnlockPlotName; //offset = 4, size = 8
	};

	struct LoadoutInfo
	{
		Name ClassName; //offset = 0, size = 8
		Array<Byte> WeaponClasses; //offset = 8, size = 12
	};

	struct UnlockableWeaponClass
	{
		Byte WeaponType; //offset = 0, size = 1
		Name UnlockPlotId; //offset = 4, size = 8
	};

	struct PlotWeapon
	{
		String WeaponClassName; //offset = 0, size = 12
		Name UnlockPlotId; //offset = 12, size = 8
		Name EquippedPlotId; //offset = 20, size = 8
	};

	struct PlotWeaponEditor
	{
		Class* WeaponClass; //offset = 0, size = 4
		Name UnlockPlotId; //offset = 4, size = 8
		Name EquippedPlotId; //offset = 12, size = 8
	};

	struct LoadoutWeaponInfo
	{
		String ClassName; //offset = 0, size = 12
		Name UnlockPlotId; //offset = 12, size = 8
		Int Rating; //offset = 20, size = 4
		Bool bNotRegularWeaponGUI: 1; //offset = 24, size = 4
	};

	class SFXPlayerSquadLoadoutData: public SFXLoadoutData
	{
		DECLARE_PACKAGE_CLASS( SFXPlayerSquadLoadoutData, SFXLoadoutData, SFXGame )

	public:

		Array<LoadoutWeaponInfo> AssaultRifles; //offset = 200, size = 12
		Array<LoadoutWeaponInfo> Shotguns; //offset = 212, size = 12
		Array<LoadoutWeaponInfo> SniperRifles; //offset = 224, size = 12
		Array<LoadoutWeaponInfo> AutoPistols; //offset = 236, size = 12
		Array<LoadoutWeaponInfo> HeavyPistols; //offset = 248, size = 12
		Array<LoadoutWeaponInfo> HeavyWeapons; //offset = 260, size = 12
		Array<PlotWeaponEditor> PlotWeaponsEditor; //offset = 272, size = 12
		Array<PlotWeapon> PlotWeapons; //offset = 284, size = 12
		Array<Byte> StandardWeapons; //offset = 296, size = 12
		Array<UnlockableWeaponClass> UnlockableStandardWeapons; //offset = 308, size = 12
		Int MaxWeapons; //offset = 320, size = 4
		Array<LoadoutInfo> PlayerLoadoutInfo; //offset = 324, size = 12
		Array<LoadoutInfo> HenchLoadoutInfo; //offset = 336, size = 12
		Array<BonusWeaponInfo> PlayerBonusWeapons; //offset = 348, size = 12
		Array<SpecialWeaponInfo> PlayerSpecialWeapons; //offset = 360, size = 12
		Array<SpecialWeaponInfo> HenchmenSpecialWeapons; //offset = 372, size = 12

		Bool CanHenchmanUseWeaponClass2( Name HenchTag, Name WeaponClassName, Int WeaponGroup, Int WeaponID, SpecialWeaponInfo SpecialInfo, BioWorldInfo* WorldInfo, BioGlobalVariableTable* VarTable, LoadoutWeaponInfo LWI, Name HenchClassName );
		Bool CanHenchmanUseWeaponClass( Name HenchTag, Class* Weapon );
		Bool CanPlayerUseWeaponClass( Class* WeaponClass, Int WeaponGroup, Int WeaponID, SpecialWeaponInfo SpecialInfo, BioWorldInfo* WorldInfo, BioGlobalVariableTable* VarTable );
		Bool CanHenchmanUseWeaponGroup( Name HenchTag, Byte WeaponGroup, LoadoutInfo Info, Name HenchClassName );
		Name GetHenchmanClassname( Name HenchTag, Int idx, Name HenchClassName );
		Bool CanPlayerUseWeaponGroup( Byte WeaponGroup, BioPlayerController* PlayerController, BioWorldInfo* WorldInfo, LoadoutInfo Info, BioGlobalVariableTable* VarTable, BonusWeaponInfo BonusInfo );
		Int GetPluralPrettyName( Int idx );
		Class* FindWeaponClass( String WeaponClassName, Class* FoundClass );
		void GetWeaponCategoryByName( String WClassName, Int GroupIdx, Int EntryIdx, LoadoutWeaponInfo LWI );
		void GetWeaponCategory( Class* WClass, Int GroupIdx, Int EntryIdx );
		Array<LoadoutWeaponInfo> GetWeaponGroup( Int idx );
	};

	class SFXPointOfInterest: public Actor
	{
		DECLARE_PACKAGE_CLASS( SFXPointOfInterest, Actor, SFXGame )

	public:

		void OnCastAt( Pawn* oAttacker, SFXPower* Power, BioSeqEvt_OnCastAt* Event, Int I );
		void OnAttacked( Pawn* oAttacker, Name WeaponName, BioSeqEvt_OnAttacked* Event, Int I );
		void PostBeginPlay();
	};

	class SFXPRI_NativeBase: public PlayerReplicationInfo
	{
		DECLARE_PACKAGE_CLASS( SFXPRI_NativeBase, PlayerReplicationInfo, SFXGame )

	public:

		Byte ControllerSensitivityConfig; //offset = 664, size = 1
		Byte TriggerConfig; //offset = 665, size = 1
		Byte StickConfig; //offset = 666, size = 1
		Byte AimAssistConfig; //offset = 667, size = 1
		Byte DifficultyOption; //offset = 668, size = 1
		Byte AutoLevelUp; //offset = 669, size = 1
		Bool bSquadUsesPowers: 1; //offset = 672, size = 4
		Bool bAutoSave: 1; //offset = 672, size = 4
		Bool bAutoLogin: 1; //offset = 672, size = 4
	};

	const char* BITS_PER_INT = 32;

	enum EProfileSetting
	{
		Setting_Unknown,
		Setting_ControllerVibration,
		Setting_YInversion,
		Setting_GamerCred,
		Setting_GamerRep,
		Setting_VoiceMuted,
		Setting_VoiceThruSpeakers,
		Setting_VoiceVolume,
		Setting_GamerPictureKey,
		Setting_GamerMotto,
		Setting_GamerTitlesPlayed,
		Setting_GamerAchievementsEarned,
		Setting_GameDifficulty,
		Setting_ControllerSensitivity,
		Setting_PreferredColor1,
		Setting_PreferredColor2,
		Setting_AutoAim,
		Setting_AutoCenter,
		Setting_MovementControl,
		Setting_RaceTransmission,
		Setting_RaceCameraLocation,
		Setting_RaceBrakeControl,
		Setting_RaceAcceleratorControl,
		Setting_GameCredEarned,
		Setting_GameAchievementsEarned,
		Setting_EndLiveIds,
		Setting_ProfileVersionNum,
		Setting_ProfileSaveCount,
		Setting_StickConfiguration,
		Setting_TriggerConfiguration,
		Setting_Subtitles,
		Setting_AimAssist,
		Setting_Difficulty,
		Setting_AutoLevel,
		Setting_SquadPowers,
		Setting_AutoSave,
		Setting_MusicVolume,
		Setting_FXVolume,
		Setting_DialogVolume,
	};

	enum EOptionOnOff
	{
		OOO_On,
		OOO_Off,
	};

	enum EOptionYesNo
	{
		OYN_Yes,
		OYN_No,
	};

	enum ETVType
	{
		TVT_Default,
		TVT_Soft,
		TVT_Lucent,
	};

	enum EAutoLevelOptions
	{
		ALO_Off,
		ALO_Squad,
	};

	enum EDifficultyOptions
	{
		DO_Level1,
		DO_Level2,
		DO_Level3,
		DO_Level4,
	};

	enum EAimAssistOptions
	{
		AAO_Low,
		AAO_Normal,
	};

	enum ETriggerConfigOptions
	{
		TCO_Default,
		TCO_SouthPaw,
	};

	enum EStickConfigOptions
	{
		SCO_Default,
		SCO_SouthPaw,
	};

	enum EAchievementID
	{
		ACHIEVEMENT_00_CERBERUS,
		ACHIEVEMENT_01_PRONOR_COMPLETE,
		ACHIEVEMENT_02_PROCER_COMPLETE,
		ACHIEVEMENT_03_JACKACQ,
		ACHIEVEMENT_04_GRUNTACQ,
		ACHIEVEMENT_05_GARRUSACQ,
		ACHIEVEMENT_06_MORDINACQ,
		ACHIEVEMENT_07_TALIACQ,
		ACHIEVEMENT_08_SAMARRAACQ,
		ACHIEVEMENT_09_THANEACQ,
		ACHIEVEMENT_10_CR1,
		ACHIEVEMENT_11_MIRANDALOYALTY,
		ACHIEVEMENT_12_JACOBLOYALTY,
		ACHIEVEMENT_13_JACKLOYALTY,
		ACHIEVEMENT_14_GRUNTLOYALTY,
		ACHIEVEMENT_15_GARRUSLOYALTY,
		ACHIEVEMENT_16_MORDINLOYALTY,
		ACHIEVEMENT_17_TALILOYALTY,
		ACHIEVEMENT_18_SAMARRALOYALTY,
		ACHIEVEMENT_19_THANELOYALTY,
		ACHIEVEMENT_20_LEGIONACQ,
		ACHIEVEMENT_21_LEGIONLOYALTY,
		ACHIEVEMENT_22_CR2,
		ACHIEVEMENT_23_ENDGAME,
		ACHIEVEMENT_24_COMPLETE,
		ACHIEVEMENT_25_COMPLETESURVIVE,
		ACHIEVEMENT_26_COMPLETEINSANITY,
		ACHIEVEMENT_27_COMPLETEFOLLOWER,
		ACHIEVEMENT_28_COMPLETEME1IMPORT,
		ACHIEVEMENT_29_ROMANCE,
		ACHIEVEMENT_30_HEADSHOT,
		ACHIEVEMENT_31_MELEECOMBO,
		ACHIEVEMENT_32_THRESHERMAW,
		ACHIEVEMENT_33_POWERCOMBO,
		ACHIEVEMENT_34_HEAVYWEAPON,
		ACHIEVEMENT_35_SCREAM,
		ACHIEVEMENT_36_DISRUPTSHIELDS,
		ACHIEVEMENT_37_BREAKBARRIERS,
	};

	struct GrinderAchievement
	{
		Byte AchievementId; //offset = 0, size = 1
		Int ProfileSettingId; //offset = 4, size = 4
		Int Goal; //offset = 8, size = 4
		Int Interval; //offset = 12, size = 4
		Title Title; //offset = 16, size = 4
		Description Description; //offset = 20, size = 4
	};

	struct AchievementData
	{
		Name Name; //offset = 0, size = 8
		Byte AchievementId; //offset = 8, size = 1
		Int XboxAchievementID; //offset = 12, size = 4
		Title Title; //offset = 16, size = 4
		Incomplete Incomplete; //offset = 20, size = 4
		Complete Complete; //offset = 24, size = 4
		Int Points; //offset = 28, size = 4
		String Icon; //offset = 32, size = 12
	};

	struct AchievementReward
	{
		Name Name; //offset = 0, size = 8
		Byte AchievementId; //offset = 8, size = 1
		String Effect; //offset = 12, size = 12
	};

	class SFXProfileSettings: public OnlineProfileSettings
	{
		DECLARE_PACKAGE_CLASS( SFXProfileSettings, OnlineProfileSettings, SFXGame )

	public:

		Array<AchievementReward> Rewards; //offset = 128, size = 12
		Array<AchievementData> StaticAchievementData; //offset = 140, size = 12
		Array<GrinderAchievement> GrinderAchievementSettings; //offset = 152, size = 12

		void SetToDefaultsEx( Array<Byte> lstProfileSettingsToReset );
		Bool GetChoseMorinthNotSamara(, Int Value );
		void SetChoseMorinthNotSamara( Bool ChoseMorinth, Int Value );
		void UpdateAchievements( Array<AchievementDetails> AchievementsList, BioPlayerController* PC, Int idx, Int FoundIdx, Bool bSaveProfile, AchievementDetails Achievement );
		Bool UnlockReward( Byte AchievementId, BioPlayerController* PC, Int idx, SFXModule_GameEffectManager* GEManager, Class* EffectClass, SFXGameEffect* Reward );
		Int GetAchievementStatus( Byte AchievementId, GrinderAchievement Settings, Int Value );
		Int GetAchievementRequirement( Byte AchievementId, GrinderAchievement Settings );
		Bool HasCompletedAchievement( Byte AchievementId, Int ProfileId, Int CompletionMask );
		Bool SetAchievementCompleted( Byte AchievementId, BioPlayerController* PC, Bool bSaveProfile, Int ProfileId, Int CompletionMask );
		Bool SetAchievementUncompleted( Byte AchievementId, BioPlayerController* PC, Bool bSaveProfile, Int ProfileId, Int CompletionMask );
		Int GetAchievementSettingField( Byte AchievementId, Int ProfileId );
		String GetFinishedGameCareerName(, String Value );
		Int GetNumGameCompletions(, Int Value );
		Int GetNumTechUpgrades(, Int Value );
		Int GetNumCodex(, Int Value );
		Int GetNumN7MissionsCompleted(, Int Value );
		Int GetNumArmourIncinerated(, Int Value );
		Int GetNumBarriersWarped(, Int Value );
		Int GetNumShieldsDisrupted(, Int Value );
		Int GetNumScreams(, Int Value );
		Int GetNumPowerCombos(, Int Value );
		Int GetNumMeleeCombos(, Int Value );
		Int GetNumHeadshots(, Int Value );
		void SetCurrentCareerName( String CareerName, String CurValue );
		String GetCurrentCareerName(, String Value );
		void SetCurrentDeviceID( Int DeviceID, BioPlayerController* PC, Int CurValue );
		Int GetCurrentDeviceID(, Int Value );
		Bool GetFilmgrainConfigOption(, Int Value );
		Bool GetMotionBlurConfigOption(, Int Value );
		Int GetDialogVolume(, Int Value );
		Int GetFXVolume(, Int Value );
		Int GetMusicVolume(, Int Value );
		Float GetDisplayGamma(, Float Value );
		void SetShowHints( Bool bEnabled, Int Value );
		Bool AreHintsEnabled(, Int Value );
		void SetTelemetryCollection( Bool bEnabled, Int Value );
		Bool IsTelemetryCollectionEnabled(, Int Value );
		Bool GetAutoLoginConfigOption(, Int Value );
		Bool GetAutoSaveConfigOption(, Int Value );
		Bool GetSquadPowerConfigOption(, Int Value );
		Byte GetAutoLevelConfigOption(, Int Value );
		Byte GetDifficultyConfigOption(, Int Value );
		Byte GetAimAssistValue(, Int Value );
		Bool GetSubtitleConfigOption(, Int Value );
		Byte GetTriggerConfigOption(, Byte retval, Int Value );
		Byte GetStickConfigOption(, Byte retval, Int Value );
		Byte GetControllerSensitivityValue(, Byte retval, Int Value );
		Bool GetInvertYOption(, Bool retval, Int Value );
		Bool GetControllerVibrationOption(, Bool retval, Int Value );
		void UpdateHeavyWeaponKill( Int WeaponID, BioPlayerController* PC, Int KillFlags, Int WeaponFlag );
		Bool GrinderAchievementIncrement( Byte AchievementId, BioPlayerController* PC, Int Value, String Title, String Description, GrinderAchievement Grinder );
		void GrinderAchievementReset( Byte AchievementId, BioPlayerController* PC, GrinderAchievement Settings );
		Bool GetGrinderAchievement( Byte AchievementId, GrinderAchievement G, Int I );
		Bool GetAchievementData( Byte AchievementId, AchievementData AD, Int idx, Int I );
	};

	const char* MaxSaveSize = 1048;

	enum EEndGameState
	{
		EGS_NotFinished,
		EGS_OutInABlazeOfGlory,
	};

	struct SaveTimeStamp
	{
		Int SecondsSinceMidnight; //offset = 0, size = 4
		Int Day; //offset = 4, size = 4
		Int Month; //offset = 8, size = 4
		Int Year; //offset = 12, size = 4
	};

	struct PlotTableSaveRecord
	{
		Array<Int> BoolVariables; //offset = 0, size = 12
		Array<Int> IntVariables; //offset = 12, size = 12
		Array<Float> FloatVariables; //offset = 24, size = 12
		Int QuestProgressCounter; //offset = 36, size = 4
		Array<PlotQuest> QuestProgress; //offset = 40, size = 12
		Array<Int> QuestIDs; //offset = 52, size = 12
		Array<PlotCodex> CodexEntries; //offset = 64, size = 12
		Array<Int> CodexIDs; //offset = 76, size = 12

		/*
		PlotCodex
		PlotQuest
		*/
	};

	struct HenchmanSaveRecord
	{
		String Tag; //offset = 0, size = 12
		Array<PowerSaveRecord> Powers; //offset = 12, size = 12
		Int CharacterLevel; //offset = 24, size = 4
		Int TalentPoints; //offset = 28, size = 4
		String LoadoutWeapons[6]; //offset = 32, size = 12
		String MappedPower; //offset = 104, size = 12
	};

	struct HotKeySaveRecord
	{
		String PawnName; //offset = 0, size = 12
		Int PowerID; //offset = 12, size = 4
	};

	struct PowerSaveRecord
	{
		String PowerName; //offset = 0, size = 12
		Float CurrentRank; //offset = 12, size = 4
		String PowerClassName; //offset = 16, size = 12
		Int WheelDisplayIndex; //offset = 28, size = 4
	};

	struct WeaponSaveRecord
	{
		String WeaponClassName; //offset = 0, size = 12
		Int AmmoUsedCount; //offset = 12, size = 4
		Int TotalAmmo; //offset = 16, size = 4
		Bool bLastWeapon: 1; //offset = 20, size = 4
		Bool bCurrentWeapon: 1; //offset = 20, size = 4
		String AmmoPowerName; //offset = 24, size = 12
	};

	struct AppearanceSaveRecord
	{
		Byte CombatAppearance; //offset = 0, size = 1
		Int CasualID; //offset = 4, size = 4
		Int FullBodyID; //offset = 8, size = 4
		Int TorsoID; //offset = 12, size = 4
		Int ShoulderID; //offset = 16, size = 4
		Int ArmID; //offset = 20, size = 4
		Int LegID; //offset = 24, size = 4
		Int SpecID; //offset = 28, size = 4
		Int Tint1ID; //offset = 32, size = 4
		Int Tint2ID; //offset = 36, size = 4
		Int Tint3ID; //offset = 40, size = 4
		Int PatternID; //offset = 44, size = 4
		Int PatternColorID; //offset = 48, size = 4
		Int HelmetID; //offset = 52, size = 4
		Bool bHasMorphHead: 1; //offset = 56, size = 4
		MorphHeadSaveRecord MorphHead; //offset = 60, size = 132
	};

	struct PlayerSaveRecord
	{
		Bool bIsFemale: 1; //offset = 0, size = 4
		String PlayerClassName; //offset = 4, size = 12
		Class* PlayerClass; //offset = 16, size = 4
		Int srClassFriendlyName; //offset = 20, size = 4
		Int Level; //offset = 24, size = 4
		Float CurrentXP; //offset = 28, size = 4
		String FirstName; //offset = 32, size = 12
		Int LastName; //offset = 44, size = 4
		Byte Origin; //offset = 48, size = 1
		Byte Notoriety; //offset = 49, size = 1
		Int TalentPoints; //offset = 52, size = 4
		String MappedPower1; //offset = 56, size = 12
		String MappedPower2; //offset = 68, size = 12
		String MappedPower3; //offset = 80, size = 12
		AppearanceSaveRecord Appearance; //offset = 92, size = 192
		Array<PowerSaveRecord> Powers; //offset = 284, size = 12
		Array<WeaponSaveRecord> Weapons; //offset = 296, size = 12
		String LoadoutWeapons[6]; //offset = 308, size = 12
		Array<HotKeySaveRecord> HotKeys; //offset = 380, size = 12
		Int Credits; //offset = 392, size = 4
		Int Medigel; //offset = 396, size = 4
		Int Eezo; //offset = 400, size = 4
		Int Iridium; //offset = 404, size = 4
		Int Palladium; //offset = 408, size = 4
		Int Platinum; //offset = 412, size = 4
		Int Probes; //offset = 416, size = 4
		Float CurrentFuel; //offset = 420, size = 4
		String FaceCode; //offset = 424, size = 12
	};

	struct MorphHeadSaveRecord
	{
		String HairMesh; //offset = 0, size = 12
		Array<String> AccessoryMeshes; //offset = 12, size = 12
		Array<MorphFeatureSaveRecord> MorphFeatures; //offset = 24, size = 12
		Array<OffsetBoneSaveRecord> OffsetBones; //offset = 36, size = 12
		Array<Vector> LOD0Vertices; //offset = 48, size = 12
		Array<Vector> LOD1Vertices; //offset = 60, size = 12
		Array<Vector> LOD2Vertices; //offset = 72, size = 12
		Array<Vector> LOD3Vertices; //offset = 84, size = 12
		Array<ScalarParameterSaveRecord> ScalarParameters; //offset = 96, size = 12
		Array<VectorParameterSaveRecord> VectorParameters; //offset = 108, size = 12
		Array<TextureParameterSaveRecord> TextureParameters; //offset = 120, size = 12

		/*
		TextureParameterSaveRecord
		VectorParameterSaveRecord
		ScalarParameterSaveRecord
		OffsetBoneSaveRecord
		MorphFeatureSaveRecord
		*/
	};

	struct DoorSaveRecord
	{
		Guid DoorGUID; //offset = 0, size = 16
		Byte CurrentState; //offset = 16, size = 1
		Byte OldState; //offset = 17, size = 1
	};

	struct KismetBoolSaveRecord
	{
		Guid BoolGUID; //offset = 0, size = 16
		Bool bValue: 1; //offset = 16, size = 4
	};

	struct StreamingStateSaveRecord
	{
		String Name; //offset = 0, size = 12
		Bool bActive: 1; //offset = 12, size = 4
	};

	struct LevelSaveRecord
	{
		String LevelName; //offset = 0, size = 12
		Bool bShouldBeLoaded: 1; //offset = 12, size = 4
		Bool bShouldBeVisible: 1; //offset = 12, size = 4
	};

	struct DependentDLCRecord
	{
		Int ModuleID; //offset = 0, size = 4
		String Name; //offset = 4, size = 12
	};

	struct GalaxyMapSaveRecord
	{
		Array<PlanetSaveRecord> Planets; //offset = 0, size = 12

		/*
		PlanetSaveRecord
		*/
	};

	struct ME1PlotTableRecord
	{
		Array<Int> BoolVariables; //offset = 0, size = 12
		Array<Int> IntVariables; //offset = 12, size = 12
		Array<Float> FloatVariables; //offset = 24, size = 12
	};

	class SFXSaveGame: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXSaveGame, Object, SFXGame )

	public:

		Array<DependentDLCRecord> DependentDLC; //offset = 60, size = 12
		String Filename; //offset = 72, size = 12
		String DebugName; //offset = 84, size = 12
		Bool bIsValid: 1; //offset = 96, size = 4
		String FemaleMorphHead; //offset = 100, size = 12
		String MaleMorphHead; //offset = 112, size = 12
		Float SecondsPlayed; //offset = 124, size = 4
		SaveTimeStamp TimeStamp; //offset = 128, size = 16
		Int Disc; //offset = 144, size = 4
		String BaseLevelName; //offset = 148, size = 12
		Byte Difficulty; //offset = 160, size = 1
		Int EndGameState; //offset = 164, size = 4
		Vector SaveLocation; //offset = 168, size = 12
		Rotator SaveRotation; //offset = 180, size = 12
		Array<LevelSaveRecord> LevelRecords; //offset = 192, size = 12
		Array<StreamingStateSaveRecord> StreamingRecords; //offset = 204, size = 12
		Array<KismetBoolSaveRecord> KismetRecords; //offset = 216, size = 12
		Array<DoorSaveRecord> DoorRecords; //offset = 228, size = 12
		Array<Guid> PawnRecords; //offset = 240, size = 12
		PlayerSaveRecord PlayerRecord; //offset = 252, size = 436
		Array<HenchmanSaveRecord> HenchmanRecords; //offset = 688, size = 12
		GalaxyMapSaveRecord GalaxyMapRecord; //offset = 700, size = 12
		PlotTableSaveRecord PlotRecord; //offset = 712, size = 88
		ME1PlotTableRecord ME1PlotRecord; //offset = 800, size = 36
		Int CurrentLoadingTip; //offset = 836, size = 4

		Class* LoadPower( String PowerClassName, Class* PowerClass );
		void LoadHotKeys( BioPlayerController* PC, Array<HotKeySaveRecord> Records, Int idx );
		void LoadWeapons( SFXPawn_Player* Player, Array<WeaponSaveRecord> Records, SFXInventoryManager* InvManager, SFXWeapon* Weapon, Int idx, SFXPower* Power, BioPowerScript* PowerScript );
		void LoadPowers( SFXPawn* Pawn, Array<PowerSaveRecord> Records, Array<PowerSaveInfo> Powers, Int idx, SFXPowerManager* PowerMan );
		BioMorphFace* LoadMorphHead(, BioMorphFace* MorphHead, MorphHeadSaveRecord Record, String PackageName, Int idx, MorphFeature Feature, OffsetBonePos Offset, ScalarParameter ScalarParam, ColorParameter ColorParam, TextureParameter TextureParam, Array<Int> BuffersToRefresh );
		void LoadAppearance( SFXPawn_Player* Player, AppearanceSaveRecord Record );
		void LoadHenchman( SFXPawn_Henchman* Hench, SFXEngine* Engine, Int idx, Array<PowerSaveRecord> Powers );
		void LoadPlayer( Int PlayerID, WorldInfo* WorldInfo, SFXGame* Game, SFXPawn_Player* Player, SFXInventoryManager* InvMan, SFXEngine* Engine, BioPlayerInput* Input, BioSaveGame* SaveGame );
		void GetSpawnData( Int IsFemale, Class* CharacterClass, String FirstName, Byte Origin, Byte Notoriety );
		void SaveHotKeys( BioPlayerController* PC, Array<HotKeySaveRecord> Records, Int idx );
		void SaveWeapons( SFXPawn_Player* Player, Array<WeaponSaveRecord> Records, SFXInventoryManager* InvManager, SFXWeapon* Weapon, WeaponSaveRecord SaveInfo );
		void SavePowers( SFXPawn* Pawn, Array<PowerSaveRecord> Records, Array<PowerSaveInfo> Powers, Int idx, SFXPowerManager* PowerMan );
		Bool SaveMorphHead( BioMorphFace* Morph, MorphHeadSaveRecord Record, Int idx, BioMaterialOverride* MatOverride );
		void SaveAppearance( SFXPawn_Player* Player, AppearanceSaveRecord Record );
		void SaveHenchmen( Int PlayerID, WorldInfo* WorldInfo, SFXGame* Game, SFXPawn_Player* Player, SFXEngine* Engine, BioBaseSquad* Squad, Int idx, Int HenchIdx, SFXPawn_Henchman* Hench, HenchmanSaveRecord SaveInfo, Array<PowerSaveRecord> Powers );
		void EnsureHenchmanRecordExists( SFXPawn_Henchman* Hench, Int HenchIdx, HenchmanSaveRecord SaveInfo, SFXEngine* Engine );
		void SavePlayer( Int PlayerID, WorldInfo* WorldInfo, SFXGame* Game, SFXEngine* Engine, SFXPawn_Player* Player, SFXInventoryManager* InvMan, BioPlayerInput* Input, Int idx, BioSaveGame* SaveGame );
		Bool GetPlayerRecord( PlayerSaveRecord Record );
	};

	class SFXSelectionLensFlareComponent: public LensFlareComponent
	{
		DECLARE_PACKAGE_CLASS( SFXSelectionLensFlareComponent, LensFlareComponent, SFXGame )

	public:
	};

	class SFXSelectionModule: public SFXModule
	{
		DECLARE_PACKAGE_CLASS( SFXSelectionModule, SFXModule, SFXGame )

	public:

		Bool m_bTargetable: 1; //offset = 68, size = 4
		Bool m_bCombatTargetable: 1; //offset = 68, size = 4
		m_srTargetTipText m_srTargetTipText; //offset = 72, size = 4
		m_srGameName m_srGameName; //offset = 76, size = 4
		Vector m_TargetOffset; //offset = 80, size = 12
		Float m_fSelectionRadius; //offset = 92, size = 4
		SFXSelectionLensFlareComponent* LensFlareComp; //offset = 96, size = 4
		LensFlare* LensFlareTemplate; //offset = 100, size = 4
		SeqVar_Bool* TargetSaveBool; //offset = 104, size = 4
		SeqVar_Bool* CombatTargetSaveBool; //offset = 108, size = 4

		void PostBeginPlay( BioWorldInfo* BWI );
		void SetCombatTargetable( Bool bTargetable );
		void SetTargetable( Bool bTargetable );
		Vector GetSelectionPoint();
	};

	class SFXSimpleUseModule: public SFXSelectionModule
	{
		DECLARE_PACKAGE_CLASS( SFXSimpleUseModule, SFXSelectionModule, SFXGame )

	public:

		Float fUseRange; //offset = 112, size = 4
		__OnUsed__Delegate __OnUsed__Delegate; //offset = 116, size = 12

		Bool IsDefaultActionPossible();
		void OnUsed( Actor* User );
	};

	class SFXSystem: public SFXGalaxyMapObject
	{
		DECLARE_PACKAGE_CLASS( SFXSystem, SFXGalaxyMapObject, SFXGame )

	public:

		Array<BioPlanet*> Planets; //offset = 140, size = 12
		Bio2DA* m_pSystemTable; //offset = 152, size = 4
		Bio2DA* m_pPlanetTable; //offset = 156, size = 4
		Bool m_bHasMassRelay: 1; //offset = 160, size = 4
		Bool m_bShowNebula: 1; //offset = 160, size = 4
		LinearColor SunColor; //offset = 164, size = 16
		LinearColor StarColor; //offset = 180, size = 16
		LinearColor FlareTint; //offset = 196, size = 16

		void RemoveChild( SFXGalaxyMapObject* Child, Int Index );
		void GetChildren( Array<SFXGalaxyMapObject*> Children );
		SFXGalaxyMapObject* AddChild(, BioPlanet* newPlanet );
		Bool LoadFrom2DA();
	};

	class SFXVersionDependentSelectionModule: public SFXSelectionModule
	{
		DECLARE_PACKAGE_CLASS( SFXVersionDependentSelectionModule, SFXSelectionModule, SFXGame )

	public:

		Bool selectable: 1; //offset = 112, size = 4

		void PostBeginPlay();
		Bool IsEnglishBuild();
	};

	struct SFXVocalizationParam
	{
		Array<Byte> SpecificType; //offset = 0, size = 12
		Array<Int> SpecificValue; //offset = 12, size = 12
	};

	struct SFXVocalizationLineV2
	{
		SFXVocalizationParam Instigator; //offset = 0, size = 24
		SFXVocalizationParam Recipient; //offset = 24, size = 24
		SFXVocalizationParam ThirdParam; //offset = 48, size = 24
		WwiseEvent* Sound; //offset = 72, size = 4
		String DebugText; //offset = 76, size = 12
	};

	struct SFXVocalizationEventV2
	{
		Array<SFXVocalizationLineV2> Lines; //offset = 0, size = 12
	};

	struct SFXVocalizationVariation
	{
		Array<SFXVocalizationLine> Variations; //offset = 0, size = 12
	};

	struct SFXVocalizationRole
	{
		Array<SFXVocalizationVariation> Roles; //offset = 0, size = 12
	};

	struct SFXVocalizationLine
	{
		WwiseEvent* Sound; //offset = 0, size = 4
		Array<Byte> SpecificType; //offset = 4, size = 12
		Array<Int> SpecificValue; //offset = 16, size = 12
	};

	class SFXVocalizationBank: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXVocalizationBank, Object, SFXGame )

	public:

		Array<SFXVocalizationRole> Vocalizations; //offset = 60, size = 12
		Array<SFXVocalizationEventV2> VocalizationsV2; //offset = 72, size = 12

		void MakeEntry( Name Role, Name Event, Name Type, Name Variation, WwiseEvent* Sound, Int EventIndex, Int RoleIndex, Int TypeIndex, Int VariationIndex, Object* Obj );
		void ImportBadOldType( Name Type, Name Variation, String Suffix );
		void EnsureArrays( Int I, Int J );
	};

	struct SFXVocalizationEventProperties
	{
		Float ChanceToPlay; //offset = 0, size = 4
		Float MinTimeBetweenSec; //offset = 4, size = 4
		Float TimeLastPlayed; //offset = 8, size = 4
		Float delay; //offset = 12, size = 4
		Float MaxWitnessDistSq; //offset = 16, size = 4
		Bool bQueueIfBlocked: 1; //offset = 20, size = 4
		Bool bCanInterrupt: 1; //offset = 20, size = 4
		Bool bCanPlayIfDead: 1; //offset = 20, size = 4
		Bool bCanPlayIfRagdolled: 1; //offset = 20, size = 4
		Array<Byte> Roles; //offset = 24, size = 12
	};

	struct SFXVocalizationEvent
	{
		BioPawn* Instigator; //offset = 0, size = 4
		BioPawn* Recipient; //offset = 4, size = 4
		Int Id; //offset = 8, size = 4
		Float DelayTimeRemainingSec; //offset = 12, size = 4
		Int DebugIndex; //offset = 16, size = 4
	};

	struct SFXVocalization
	{
		BioPawn* Speaker; //offset = 0, size = 4
		SFXVocalizationEvent Event; //offset = 4, size = 20
		Byte Role; //offset = 24, size = 1
		Int Specific; //offset = 28, size = 4
	};

	class SFXVocalizationManagerNativeBase: public Actor
	{
		DECLARE_PACKAGE_CLASS( SFXVocalizationManagerNativeBase, Actor, SFXGame )

	public:

		SFXVocalizationBank* OverridesAllIfSet; //offset = 508, size = 4
		Bool bDebugging: 1; //offset = 512, size = 4
		Bool bAlwaysPlay: 1; //offset = 512, size = 4
		Int DebugCounter; //offset = 516, size = 4
		Array<BioPawn*> m_aIgnorePawn; //offset = 520, size = 12
		Array<SFXVocalizationEventProperties> EventProperties; //offset = 532, size = 12
		Array<SFXVocalizationEvent> QueuedEvents; //offset = 544, size = 12

		void TickEvents( Float DeltaTime );
		String DebugOutput( Int Type, Int Value, Object* En, String output );
		Bool SpecificNameMatches( Byte Type, BioPawn* Pawn );
		Bool SpecificChallengeMatches( Byte Type, BioPawn* Pawn );
		Bool SpecificWeaponMatches( Byte Type, BioPawn* Pawn );
		Bool SpecificGenderMatches( Byte Type, BioPawn* Pawn );
		Bool SpecificAffiliationMatches( Int idx, BioPawn* Pawn );
		Bool SpecificCharacterTypeMatches( Byte Type, BioPawn* Pawn );
		Bool SpecificLocationMatches( Byte Type, BioPawn* BP, BioPawn* Speaker );
		Bool HandleSFXVocalizationEvent( SFXVocalizationEvent Event );
		void RemoveFromIgnoreList( BioPawn* oPawn );
		void AddToIgnoreList( BioPawn* oPawn );
		SFXVocalizationBank* GetPawnVocalizationBank( BioPawn* P );
		Bool PlaySFXVocalizationSLineInternal( SFXVocalizationEvent Event, SFXVocalizationLine LineToPlay, BioPawn* Speaker, Float DelaySec, BioWorldInfo* BWI );
	};

	enum ESFXVocalizationWeapon
	{
		SFXVocalizationWeapon_None,
		SFXVocalizationWeapon_Pistol,
		SFXVocalizationWeapon_SMG,
		SFXVocalizationWeapon_AssaultRifle,
	};

	enum ESFXVocalizationGender
	{
		SFXVocalizationGender_None,
		SFXVocalizationGender_Male,
	};

	enum ESFXVocalizationName
	{
		SFXVocalizationCharacter_None,
		SFXVocalizationCharacter_Shepard,
		SFXVocalizationCharacter_Garrus,
		SFXVocalizationCharacter_Tali,
		SFXVocalizationCharacter_Legion,
		SFXVocalizationCharacter_Samara,
		SFXVocalizationCharacter_Morinth,
		SFXVocalizationCharacter_Jacob,
	};

	enum ESFXVocalizationLocation
	{
		SFXVocalizationLocation_None,
		SFXVocalizationLocation_Above,
		SFXVocalizationLocation_Below,
		SFXVocalizationLocation_Right,
		SFXVocalizationLocation_Left,
	};

	enum ESFXVocalizationBool
	{
		SFXVocalizationBool_False,
		SFXVocalizationBool_True,
	};

	enum ESFXVocalizationVariationType
	{
		SFXVocalizationSpecificType_None,
		SFXVocalizationSpecificType_Location,
		SFXVocalizationSpecificType_CharacterName,
		SFXVocalizationSpecificType_CharacterType,
		SFXVocalizationSpecificType_Affiliation,
		SFXVocalizationSpecificType_Gender,
	};

	enum ESFXVocalizationRole
	{
		SFXVocalizationRole_None,
		SFXVocalizationRole_Instigator,
		SFXVocalizationRole_Recipient,
		SFXVocalizationRole_EnemyWitness,
	};

	class SFXVocalizationTypes: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXVocalizationTypes, Object, SFXGame )

	public:

		Array<Object*> EnumForType; //offset = 60, size = 12
	};

	enum EBioPathNodeGenerators
	{
		PATHNODE_SQUARE,
	};

	enum EBioPathNodeAlignment
	{
		ALIGN_NONE,
		ALIGN_CENTER,
	};

	class BioPathNodeVolume: public Volume
	{
		DECLARE_PACKAGE_CLASS( BioPathNodeVolume, Volume, SFXGame )

	public:

		Bool bDeleteNodesOnPopulate: 1; //offset = 568, size = 4
		Bool bDoNotGenerateGroundNodes: 1; //offset = 568, size = 4
		Float fMaxNodeSeparation; //offset = 572, size = 4
		Float fMargin; //offset = 576, size = 4
		Float fNodeTargetRadius; //offset = 580, size = 4
		Float fMaxSlope; //offset = 584, size = 4
		Int nLevels; //offset = 588, size = 4
		Float fLevelHeight; //offset = 592, size = 4
		Byte eAlignment; //offset = 596, size = 1
		Byte ePathNodeGenerator; //offset = 597, size = 1
	};

	class BioTierInfo: public Object
	{
		DECLARE_PACKAGE_CLASS( BioTierInfo, Object, SFXGame )

	public:

		Color DrawColor; //offset = 60, size = 4
		Bool Enabled: 1; //offset = 64, size = 4
		Bool IsFloor: 1; //offset = 64, size = 4
		Bool IsGlobal: 1; //offset = 64, size = 4
		Bool ValidCurrentTrigger: 1; //offset = 64, size = 4
		Int Priority; //offset = 68, size = 4
		Int CurrentTrigger; //offset = 72, size = 4
		Array<Int> Triggers; //offset = 76, size = 12

		void Retouch( Bool bForce );
		BioTriggerStream* FindTriggerForPosition( Vector pos );
		BioTriggerStream* GetCurrentTrigger( Bool OnlyIfValid );
		void SetCurrentTrigger( BioTriggerStream* TriggerIn, Bool Valid );
		void RemoveTrigger( BioTriggerStream* TriggerIn );
		void AddTrigger( BioTriggerStream* TriggerIn );
	};

	struct BioStreamingState
	{
		Name StateName; //offset = 0, size = 8
		String StateDescription; //offset = 8, size = 12
		Name InChunkName; //offset = 20, size = 8
		Bool ColorChunks: 1; //offset = 28, size = 4
		Array<Name> VisibleChunkNames; //offset = 32, size = 12
		Array<Name> VisibleSoonChunkNames; //offset = 44, size = 12
		Array<Name> LoadChunkNames; //offset = 56, size = 12
		Float DesignFudget; //offset = 68, size = 4
		Float ArtFudget; //offset = 72, size = 4
	};

	class BioTriggerStream: public TriggerVolume
	{
		DECLARE_PACKAGE_CLASS( BioTriggerStream, TriggerVolume, SFXGame )

	public:

		Int m_StoredStateIndex; //offset = 568, size = 4
		Int m_nPriorityLevel; //offset = 572, size = 4
		Array<BioStreamingState> StreamingStates; //offset = 576, size = 12
		Byte Tier; //offset = 588, size = 1
		Name TierName; //offset = 592, size = 8
		BioTierInfo* TierInfo; //offset = 600, size = 4
		Bool bErrorsLogged: 1; //offset = 604, size = 4
		GFxMovieInfo* m_oAreaMapOverride; //offset = 608, size = 4
		Bool m_bIgnoreForStreamingCoverage: 1; //offset = 612, size = 4
		Int bInPlotStreaming; //offset = 616, size = 4

		void UnTouch( Actor* Other, BioPawn* oBioPawn, Pawn* P );
		void Touch( Actor* Other, PrimitiveComponent* OtherComp, Vector HitLocation, Vector HitNormal, Pawn* P );
		void ForegroundStreamingDone( Array<Sequence*> Sequences, Pawn* PlayerPawn );
		void BackgroundStreamingDone( Array<Sequence*> Sequences, Pawn* PlayerPawn );
		void Retouch( Bool bForce );
		void DoStasis( Actor* Touched, Bool bTouched );
		void DoUntouch( Actor* Other );
		void DoTouch();
	};

	struct TierDetails_t
	{
		Name TierName; //offset = 0, size = 8
		Color Color; //offset = 8, size = 4
		Bool IsEnabled: 1; //offset = 12, size = 4
		Bool IsGlobal: 1; //offset = 12, size = 4
		Bool IsFloor: 1; //offset = 12, size = 4
		Int Priority; //offset = 16, size = 4
	};

	class BioTierManager: public Object
	{
		DECLARE_PACKAGE_CLASS( BioTierManager, Object, SFXGame )

	public:

		Array<TierDetails_t> TierDetails; //offset = 60, size = 12
		Name DefaultTier; //offset = 72, size = 8
		Array<BioTierInfo*> TierInfo; //offset = 80, size = 12
		BioTierInfo* FloorTier; //offset = 92, size = 4
		Byte DefaultTierIndex; //offset = 96, size = 1
		Bool bReevaluateStreaming: 1; //offset = 100, size = 4

		void ConvertPlotStreaming( Name fnVirtualChunk, Array<PlotStreamingElement> aRealChunks );
		void UnregisterPlotStreaming( Array<PlotStreamingSet> PlotStreaming );
		void RegisterPlotStreaming( Array<PlotStreamingSet> PlotStreaming );
		void ReevaluateStreaming( Bool bForce );
		void ForegroundStreamingDone( Array<Sequence*> Sequences, Pawn* PlayerPawn );
		void BackgroundStreamingDone( Array<Sequence*> Sequences, Pawn* PlayerPawn );
		void RemoveTrigger( BioTriggerStream* TriggerIn );
		void SetTierByIndex( Byte TierIndex, BioTriggerStream* TriggerIn );
		void SetTierByName( Name TierNameIn, BioTriggerStream* TriggerIn );
		Byte GetTierIndex( Name TierNameIn );
		BioTierInfo* GetDefaultTier();
		BioTierInfo* GetFloorTier();
		BioTierInfo* GetTier( Byte Index );
		void Retouch( Bool bForce );
		void ClearCurrentTriggers();
		Name GetTierName( Byte Index );
		Byte GetNumTiers();
	};

	enum BioBrowserStates
	{
		BBS_NORMAL,
		BBS_ALERT,
	};

	enum MEBrowserWheelSubPages
	{
		MBW_SP_Map,
		MBW_SP_Save,
		MBW_SP_CharacterRecord,
		MBW_SP_Load,
		MBW_SP_Journal,
	};

	enum JournalSortMethods
	{
		JSM_Newest,
		JSM_Name,
	};

	enum EPlayerRenderStateSetting
	{
		PRSS_NEARCLIP,
	};

	enum BioLocalVariableObjectType
	{
		BIO_LVOT_PLAYER,
		BIO_LVOT_OWNER,
		BIO_LVOT_TARGET,
	};

	struct EffectsMaterialPriority
	{
		Name EffectsMaterial; //offset = 0, size = 8
		Int Priority; //offset = 8, size = 4
	};

	struct SubPageState
	{
		Int nPadding; //offset = 0, size = 4
		Byte Page; //offset = 4, size = 1
		Byte State; //offset = 5, size = 1
	};

	struct BoughtVFXListEnds
	{
		Int HeadIndex; //offset = 0, size = 4
		Int TailIndex; //offset = 4, size = 4
	};

	struct VFXListNode
	{
		BioVisualEffect* Effect; //offset = 0, size = 4
		Int NextNode; //offset = 4, size = 4
		Int PrevNode; //offset = 8, size = 4
		Bool ValidNode: 1; //offset = 12, size = 4
	};

	struct VFXTemplatePoolSizeSpec
	{
		BioVFXTemplate* Template; //offset = 0, size = 4
		Int MaxPoolSize; //offset = 4, size = 4
		Int MinPoolSize; //offset = 8, size = 4
	};

	struct WorldEnvironmentEffect
	{
		BioVisualEffect* m_Effect; //offset = 0, size = 4
		Vector m_vOffset; //offset = 4, size = 12
		Float m_fBlendDuration; //offset = 16, size = 4
		Float m_fBlendTime; //offset = 20, size = 4
		Float m_fDesiredIntensity; //offset = 24, size = 4
		Float m_fCurrentIntensity; //offset = 28, size = 4
		Controller* m_TargetController; //offset = 32, size = 4
		Bool m_bAttachToCamera: 1; //offset = 36, size = 4
	};

	struct WorldStreamingState
	{
		Name Name; //offset = 0, size = 8
		Bool Enabled: 1; //offset = 8, size = 4
	};

	struct PlotStreamingElement
	{
		Name ChunkName; //offset = 0, size = 8
		Int Conditional; //offset = 8, size = 4
		Bool bFallback: 1; //offset = 12, size = 4
	};

	struct PlotStreamingSet
	{
		Name VirtualChunkName; //offset = 0, size = 8
		Array<PlotStreamingElement> Elements; //offset = 8, size = 12
	};

	class BioWorldInfo: public WorldInfo
	{
		DECLARE_PACKAGE_CLASS( BioWorldInfo, WorldInfo, SFXGame )

	public:

		BioPlayerSquad* m_playerSquad; //offset = 1212, size = 4
		BioSaveGame* CurrentGame; //offset = 1216, size = 4
		Bool bStreamingLevelsResorted: 1; //offset = 1220, size = 4
		Bool m_bJournalShowingMissions: 1; //offset = 1220, size = 4
		Bool m_bCodexShowingPrimary: 1; //offset = 1220, size = 4
		Bool m_bCinematicSkip: 1; //offset = 1220, size = 4
		Bool m_bDisableCinematicSkip: 1; //offset = 1220, size = 4
		Bool m_bForceCinematicDamage: 1; //offset = 1220, size = 4
		Bool m_bWaitingForStreamingLoadIdle: 1; //offset = 1220, size = 4
		Bool m_bWaitingForStreamingLoadVisibleComplete: 1; //offset = 1220, size = 4
		Bool m_bHasPlayerTeleported: 1; //offset = 1220, size = 4
		Bool m_bGameWasPaused: 1; //offset = 1220, size = 4
		Bool bKismetShowHUD: 1; //offset = 1220, size = 4
		Int nMemoryBudgetDLC; //offset = 1224, size = 4
		BioTimerList* TimerList; //offset = 1228, size = 4
		BioGlobalVariableTable* m_oGlobalVariables; //offset = 1232, size = 4
		BioQuestProgressionMap* m_oQuestProgress; //offset = 1236, size = 4
		BioDiscoveredCodexMap* m_oDiscoveredCodex; //offset = 1240, size = 4
		Byte m_nJournalSortMethod; //offset = 1244, size = 1
		Byte m_lstBrowserAlerts[9]; //offset = 1245, size = 1
		Int m_nJournalLastSelectedMission; //offset = 1256, size = 4
		Int m_nJournalLastSelectedAssignment; //offset = 1260, size = 4
		Int m_nCodexLastSelectedPrimary; //offset = 1264, size = 4
		Int m_nCodexLastSelectedSecondary; //offset = 1268, size = 4
		BioConversation* m_oCurrentConversation; //offset = 1272, size = 4
		BioSeqAct_FaceOnlyVO* m_pCurrentFaceOnlyVO; //offset = 1276, size = 4
		BioConversation* m_pConvCondCheckOverride; //offset = 1280, size = 4
		BioEventNotifier* EventNotifier; //offset = 1284, size = 4
		BioPlayerController* LocalPlayerController; //offset = 1288, size = 4
		BioPlotTreasure* m_oPlotTreasureMgr; //offset = 1292, size = 4
		SFXPlotTreasure* m_oTreasure; //offset = 1296, size = 4
		BioSubtitles* m_Subtitles; //offset = 1300, size = 4
		String m_sFriendlyName; //offset = 1304, size = 12
		GFxMovieInfo* m_oAreaMap; //offset = 1316, size = 4
		GFxMovieInfo* m_oParentAreaMap; //offset = 1320, size = 4
		Bool m_bInvokesHintMessages: 1; //offset = 1324, size = 4
		Bool m_bFlushSFHud: 1; //offset = 1324, size = 4
		Bool m_bBreakHideHudOnConversation: 1; //offset = 1324, size = 4
		Bool m_bDebugCameras: 1; //offset = 1324, size = 4
		Bool m_bPartyMembersImmuneToExternalForce: 1; //offset = 1324, size = 4
		Bool m_bAllowBrowserWheel: 1; //offset = 1324, size = 4
		String m_sCinematicSkipEvent; //offset = 1328, size = 12
		Float m_fConversationInterruptDistance; //offset = 1340, size = 4
		Float m_fIdleCameraSpeed; //offset = 1344, size = 4
		Float m_fNoSkipBuffer; //offset = 1348, size = 4
		Array<Float> m_fLookAtDelays; //offset = 1352, size = 12
		Float m_fLookAtNoticeMaxRange; //offset = 1364, size = 4
		Float m_fLookAtNoticeInitialDelay; //offset = 1368, size = 4
		Float m_fLookAtNoticeDuration; //offset = 1372, size = 4
		Float m_fLookAtNoticeSpeed; //offset = 1376, size = 4
		Array<Name> m_aCullFXConvList; //offset = 1380, size = 12
		Int m_nCurrentTipID; //offset = 1392, size = 4
		m_OverrideTip m_OverrideTip; //offset = 1396, size = 4
		m_srProfileNotSignedInWarningMsg m_srProfileNotSignedInWarningMsg; //offset = 1400, size = 4
		BioBaseSquad* m_oPlayerSquad; //offset = 1404, size = 4
		Array<Actor*> SelectableActors; //offset = 1408, size = 12
		Array<Actor*> RadarActors; //offset = 1420, size = 12
		Array<PlotStreamingSet> PlotStreaming; //offset = 1432, size = 12
		Array<WorldStreamingState> m_WorldStreamingStates; //offset = 1444, size = 12
		BioInGamePropertyEditor* m_oPropertyEditor; //offset = 1456, size = 4
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_mVFXPool; //offset = 1460, size = 20
		Float m_fPlayerTeleportTimeSeconds; //offset = 1480, size = 4
		Array<VFXTemplatePoolSizeSpec> m_VFXTemplatePoolSizeOverride; //offset = 1484, size = 12
		Float m_fMaxVFXBudget; //offset = 1496, size = 4
		Float m_fUsedVFXBudget; //offset = 1500, size = 4
		Array<VFXListNode> m_BoughtVFXList; //offset = 1504, size = 12
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_BoughtVFXMap; //offset = 1516, size = 20
		BoughtVFXListEnds m_aBoughtEffects[5]; //offset = 1536, size = 8
		WorldEnvironmentEffect m_ActiveEnvironmentEffect; //offset = 1576, size = 40
		WorldEnvironmentEffect m_PendingEnvironmentEffect; //offset = 1616, size = 40
		BioPhysicsSounds* m_PhysicsSound; //offset = 1656, size = 4
		Array<String> ConditionalClasses; //offset = 1660, size = 12
		Array<String> m_lstCinematicsSeen; //offset = 1672, size = 12
		String m_sDestinationAreaMap; //offset = 1684, size = 12
		Vector m_vDestination; //offset = 1696, size = 12
		Array<Int> m_pScannedClusters; //offset = 1708, size = 12
		Array<Int> m_pScannedSystems; //offset = 1720, size = 12
		Array<Int> m_pScannedPlanets; //offset = 1732, size = 12
		BioUIWorld* m_UIWorld; //offset = 1744, size = 4
		BioSkillGame_Handler* SkillGameHandler; //offset = 1748, size = 4
		BioSkillGame* m_SkillGame; //offset = 1752, size = 4
		Float m_fGameOverPauseTime; //offset = 1756, size = 4
		BioPowerManager* m_oPowerManager; //offset = 1760, size = 4
		AudioComponent* m_pEndGameMusic; //offset = 1764, size = 4
		WwiseEventPairObject* m_pEndGameMusicEvent; //offset = 1768, size = 4
		Int bForceFullGarbageCollection; //offset = 1772, size = 4
		Int m_nDesignerEnableDifficultyChecksPlotFlag; //offset = 1776, size = 4
		Array<SubPageState> SubPageStateOverrides; //offset = 1780, size = 12
		WwiseEnvironmentVolume* HighestPriorityAudioEnvVolume; //offset = 1792, size = 4
		Array<EffectsMaterialPriority> EffectsMaterialPriorities; //offset = 1796, size = 12
		Array<Object*> m_AutoPersistentObjects; //offset = 1808, size = 12

		void SetPlayersControllerId( LocalPlayer* Player, Int ControllerId );
		BioRemoteLogger* GetGLogger();
		void ClearBrowserWheelStateOverride();
		void AddBrowserWheelStateOverride( SubPageState i_SubStateOverride );
		void StartMatch( BioPawn* oPlayer, BioWorldInfo* oBWorldInfo, String sStartMapName, String sMapName, Int nTemp );
		Class* GetSaveObjectClass();
		void GetGlobalEvents( Class* EventClass, Array<SequenceEvent*> aEvents );
		void SetRenderStateOfPlayerToDefault( Byte RenderState );
		void SetRenderStateOfPlayer( Byte RenderState, Float fValue );
		Float GetRenderStateOfPlayer( Byte RenderState );
		void UpdateEnvironmentEffects( Float fDeltaT );
		void UpdateSubtitles( Float fDeltaT );
		BioSubtitles* GetSubtitles();
		void SetGlobalTlk( Bool bMale, Bool bPurge );
		void PostBeginPlay();
		Bool CheckState( Int nState, BioGlobalVariableTable* gv );
		void InterruptConversation( BioConversation* oConv );
		void UpdateConversation( Float fDeltaT );
		void EndCurrentFaceOnlyVO( BioSeqAct_FaceOnlyVO* pFOVO );
		void EndCurrentConversation();
		Bool StartConversation( BioConversation* oConv, Actor* Owner_, Actor* Target );
		BioConversation* GetConversation();
		void ClearCurrentGame();
		BioGlobalVariableTable* GetGlobalVariables();
		void InitDownloadableContent( Bool bFinalAttempt );
		void Tick( Float fDeltaT );
		BioPlayerController* GetLocalPlayerController();
		Bool GetCurrentStreamingChunkName( Name nmStreamingChunkName );
		void PlayEndGameMusic();
		void UpdateVFXPools( Float fDeltaT );
		void UpdateVFXStats( Float fDeltaT );
		void OverrideVFXPoolSize( BioVFXTemplate* a_pEffect, Int a_nMaxPoolSize, Int a_nMinPoolSize );
		void GetDefaultVFXPoolSize( BioVFXTemplate* a_pEffect, Int a_rnMaxPoolSize, Int a_rnMinPoolSize );
		BioVisualEffectPool* GetVFXPool( BioVFXTemplate* pEffect );
		void OnGameLoaded();
		String GetDetailedVersionString();
		String GetEpicVersionString();
		String GetVersionString();
		void MoveToArea( Name sAreaName, Name sNextAreaStartPoint );
		Bool GetLocalBoolVariable( Byte eObjectType, Name GetFunctionName, Name sTag, Int nParam );
		Float GetLocalFloatVariable( Byte eObjectType, Name GetFunctionName, Name sTag, Int nParam );
		Int GetLocalIntegerVariable( Byte eObjectType, Name GetFunctionName, Name sTag, Int nParam );
		void ExecuteConsequence( Int nConsequence, Int nParam );
		void ExecuteStateTransition( Int nTransition, Int nParam );
		Bool CheckConditional( Int nConditional, Int nParam );
		void CauseEvent( Name EventName );
		Bool GetGuiInputPermission( Byte nEvent );
		void RequestStartNewGame( Bool bFemale, Name RemoteEvent, BioPlayerController* BPC, MassEffectGuiManager* MEGM );
		void OnNewGameStartRequest( Name RemoteEvent );
		Bool TriggerCinematicSkippedEvent();
		void SetStreamingState( String StateName, Bool bValue );
	};

	class BioAnim_TurnInPlace_Rotator: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnim_TurnInPlace_Rotator, AnimNodeBlendBase, SFXGame )

	public:

		BioPawn* BioPawnOwner; //offset = 196, size = 4
		BioAnimNodeBlend_TurnInPlace* TurnInPlaceNode; //offset = 200, size = 4
	};

	struct BioAnimCheckBlendOutNode
	{
		AnimNodeBlendList* Node; //offset = 0, size = 4
		Int Index; //offset = 4, size = 4
	};

	struct BioAnimCheckBlendOutPath
	{
		Array<BioAnimCheckBlendOutNode> Nodes; //offset = 0, size = 12
		Pointer Next; //offset = 12, size = 4
	};

	class BioAnimCheckBlendOut: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAnimCheckBlendOut, Object, SFXGame )

	public:

		BioAnimCheckBlendOutPath PathsLL; //offset = 60, size = 16
		AnimNode* Parent; //offset = 76, size = 4
	};

	struct BioAnimMovementSyncNode
	{
		AnimNode* Node; //offset = 0, size = 4
		AnimNode* NodeWeight; //offset = 4, size = 4
	};

	class BioAnimMovementSync: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAnimMovementSync, Object, SFXGame )

	public:

		Array<BioAnimMovementSyncNode> MovementNodes; //offset = 60, size = 12
		Bool bInitialized: 1; //offset = 72, size = 4
	};

	struct RotTransitionInfo
	{
		Float RotationOffset; //offset = 0, size = 4
		Int ChildIndex; //offset = 4, size = 4
	};

	class BioAnimNodeBlend_TurnInPlace: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlend_TurnInPlace, AnimNodeBlendList, SFXGame )

	public:

		Bool bInitialized: 1; //offset = 220, size = 4
		Bool bRootRotInitialized: 1; //offset = 220, size = 4
		Int LastPawnYaw; //offset = 224, size = 4
		Float PawnRotationRate; //offset = 228, size = 4
		Int LastRootBoneYaw; //offset = 232, size = 4
		Int YawOffset; //offset = 236, size = 4
		Bool bDelayBlendOutToPlayAnim: 1; //offset = 240, size = 4
		Bool bPlayingTurnTransition: 1; //offset = 240, size = 4
		Bool bTransitioningToIdle: 1; //offset = 240, size = 4
		BioPawn* BioPawnOwner; //offset = 244, size = 4
		Array<RotTransitionInfo> RotTransitions; //offset = 248, size = 12
		Float TransitionBlendInTime; //offset = 260, size = 4
		Float TransitionBlendOutTime; //offset = 264, size = 4
		Int CurrentTransitionIndex; //offset = 268, size = 4
		Float TransitionThresholdAngle; //offset = 272, size = 4
		Float fRotationResetRate; //offset = 276, size = 4
		Float AbortThresholdPercentage; //offset = 280, size = 4
		Float AbortTransitionBlendTime; //offset = 284, size = 4
	};

	enum EBioAnimBlendDirection
	{
		eBioAnimBlend_NOBLEND,
		eBioAnimBlend_BLENDUP,
		eBioAnimBlend_BLENDDOWN,
	};

	class BioAnimNodeBlendBase: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendBase, AnimNodeBlendBase, SFXGame )

	public:

		Float m_fBlendTime; //offset = 196, size = 4
		Bool m_bIsBlending: 1; //offset = 200, size = 4
		Bool m_bTriggerTimeBlend: 1; //offset = 200, size = 4
		Bool m_bBlendDirect: 1; //offset = 200, size = 4
		Bool m_bShowSlider: 1; //offset = 200, size = 4
		Float m_fRemainingTime; //offset = 204, size = 4
		Float m_fTotalBlendTime; //offset = 208, size = 4
		Float m_fTargetWeight; //offset = 212, size = 4
		Int m_nLastChild; //offset = 216, size = 4
		Int m_nTargetChild; //offset = 220, size = 4

		void SetChildAnimTime( AnimNode* oChild, Float fTime );
	};

	enum EBioAnimAdditive
	{
		eBioAnimAdd_Primary,
		eBioAnimAdd_Additive,
	};

	class BioAnimNodeBlendAdditive: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendAdditive, BioAnimNodeBlendBase, SFXGame )

	public:

		Float m_fPreviewWeight; //offset = 224, size = 4
	};

	class BioAnimNodeBlendAdditiveCover: public BioAnimNodeBlendAdditive
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendAdditiveCover, BioAnimNodeBlendAdditive, SFXGame )

	public:

		Float BlendInDuration; //offset = 228, size = 4
		Float BlendOutDuration; //offset = 232, size = 4
	};

	class BioAnimNodeBlendAdditiveDamage: public BioAnimNodeBlendAdditive
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendAdditiveDamage, BioAnimNodeBlendAdditive, SFXGame )

	public:

		Int DamageNodeIndex; //offset = 228, size = 4
		Bool bLastDamageNode: 1; //offset = 232, size = 4
		Bool bProcessDamage: 1; //offset = 232, size = 4
		Float MaxDamageThreshold; //offset = 236, size = 4
		Vector m_vDamageDir; //offset = 240, size = 12
		Int m_nDamageIndex; //offset = 252, size = 4
	};

	const char* BIO_ACTION_ANIM_NODE_COUNT = 11;

	enum EBioActionAnimNode
	{
		ACTION_ANIM_NODE_POSTURE,
		ACTION_ANIM_NODE_MOUNT,
		ACTION_ANIM_NODE_HESITATE,
		ACTION_ANIM_NODE_FALL,
		ACTION_ANIM_NODE_BIOTIC,
		ACTION_ANIM_NODE_DEATH,
	};

	struct BlendTime
	{
		Byte m_eAnimNode; //offset = 0, size = 1
		Float m_fTime; //offset = 4, size = 4
	};

	class BioAnimNodeBlendByAction: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByAction, AnimNodeBlendList, SFXGame )

	public:

		Byte m_eCurrentAnimNode; //offset = 220, size = 1
		Bool m_bHesitateAvailable: 1; //offset = 224, size = 4
		Bool m_bFallingAvailable: 1; //offset = 224, size = 4
		BlendTime m_aBlendTimeFromPostureNode[11]; //offset = 228, size = 8
		BlendTime m_aBlendTimeFromMountNode[11]; //offset = 316, size = 8
		BlendTime m_aBlendTimeFromHesitateNode[11]; //offset = 404, size = 8
		BlendTime m_aBlendTimeFromFallNode[11]; //offset = 492, size = 8
		BlendTime m_aBlendTimeFromBioticNode[11]; //offset = 580, size = 8
		BlendTime m_aBlendTimeFromDeathNode[11]; //offset = 668, size = 8
		BlendTime m_aBlendTimeFromDieNode[11]; //offset = 756, size = 8
		BlendTime m_aBlendTimeFromTechNode[11]; //offset = 844, size = 8
		BlendTime m_aBlendTimeFromMatineeNode[11]; //offset = 932, size = 8
		BlendTime m_aBlendTimeFromGetUpNode[11]; //offset = 1020, size = 8
		BlendTime m_aBlendTimeFromGestures[11]; //offset = 1108, size = 8
	};

	enum EBioAnimNodeBlendByAim
	{
		eBioAnimNodeBlendByAim_LevelFront,
		eBioAnimNodeBlendByAim_LevelLeft,
		eBioAnimNodeBlendByAim_LevelRight,
		eBioAnimNodeBlendByAim_UpFront,
		eBioAnimNodeBlendByAim_UpLeft,
	};

	struct BioAnimNodeBlendByAimLimits
	{
		Float DegreesLeft; //offset = 0, size = 4
		Float DegreesRight; //offset = 4, size = 4
		Float DegreesUp; //offset = 8, size = 4
		Float DegreesDown; //offset = 12, size = 4
	};

	class BioAnimNodeBlendByAim: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByAim, AnimNodeBlendBase, SFXGame )

	public:

		BioAnimNodeBlendByAimLimits LimitsDefault; //offset = 196, size = 16
		BioAnimNodeBlendByAimLimits LimitsMirrored; //offset = 212, size = 16
		Float AimBlendOutDuration; //offset = 228, size = 4
		Float YawRate; //offset = 232, size = 4
		Float Yaw; //offset = 236, size = 4
		Float Pitch; //offset = 240, size = 4
		Float RemainingBlendDuration; //offset = 244, size = 4
		Bool bUseMirrored: 1; //offset = 248, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 252, size = 4
		Float SliderYaw; //offset = 256, size = 4
		Float SliderPitch; //offset = 260, size = 4
	};

	class BioAnimNodeBlendByCustomAnim: public AnimNodeBlend
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByCustomAnim, AnimNodeBlend, SFXGame )

	public:
	};

	enum EBioAnimDamage
	{
		eBioAnimDamage_Front,
		eBioAnimDamage_Rear,
		eBioAnimDamage_Left,
	};

	class BioAnimNodeBlendByDamage: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByDamage, AnimNodeBlendList, SFXGame )

	public:

		Bool bAdditiveMode: 1; //offset = 220, size = 4
		Int m_nLastDamageIndex; //offset = 224, size = 4
	};

	enum EBioAnimDeath
	{
		eBioAnimDeath_Head,
		eBioAnimDeath_Stomach,
		eBioAnimDeath_ArmLeft,
		eBioAnimDeath_ArmRight,
	};

	class BioAnimNodeBlendByDeath: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByDeath, BioAnimNodeBlendBase, SFXGame )

	public:

		Name Head; //offset = 224, size = 8
		Name LeftArm; //offset = 232, size = 8
		Name RightArm; //offset = 240, size = 8
		Name LeftLeg; //offset = 248, size = 8
		Name RightLeg; //offset = 256, size = 8
		Name DeathEventName; //offset = 264, size = 8
		Int m_nHeadRoot; //offset = 272, size = 4
		Int m_nLeftArmRoot; //offset = 276, size = 4
		Int m_nRightArmRoot; //offset = 280, size = 4
		Int m_nLeftLegRoot; //offset = 284, size = 4
		Int m_nRightLegRoot; //offset = 288, size = 4
		Bool m_bEventTriggered: 1; //offset = 292, size = 4
		Float m_fTimeToRagdoll; //offset = 296, size = 4
		Float m_fCurrentTime; //offset = 300, size = 4
	};

	const char* SHOTS_PER_LOOP_CYCLE = 5.0;

	enum EBioAnimNodeBlendByFireSequenceChild
	{
		BIO_ANIM_NODE_BLEND_BY_FIRE_SEQUENCE_CHILD_IDLE,
		BIO_ANIM_NODE_BLEND_BY_FIRE_SEQUENCE_CHILD_START,
		BIO_ANIM_NODE_BLEND_BY_FIRE_SEQUENCE_CHILD_LOOP,
	};

	class BioAnimNodeBlendByFireSequence: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByFireSequence, AnimNodeBlendList, SFXGame )

	public:

		Float BlendDuration; //offset = 220, size = 4
		Int QueuedTransition; //offset = 224, size = 4
		Array<AnimNodeSequence*> CachedAnimSeqLoop; //offset = 228, size = 12
		Array<AnimNodeSequence*> CachedAnimSeqEnd; //offset = 240, size = 12
		Bool CacheUpdated: 1; //offset = 252, size = 4
		Int FlashCount; //offset = 256, size = 4
		Vector FlashLocation; //offset = 260, size = 12
		Float SliderPosition; //offset = 272, size = 4

		Float GetPlayRate( AnimNodeSequence* Seq, Float SeqLength, Float TimeForOneShot, Float TimeForAllShots, Float FireRate, Pawn* Pawn, SFXWeapon* Weapon );
		void NotifyWeaponAnimationPlaying( Bool Playing, Pawn* Pawn, SFXWeapon* Weapon );
	};

	enum EBioAnimIncline
	{
		eBioAnimIncline_Up,
		eBioAnimIncline_Level,
	};

	class BioAnimNodeBlendByIncline: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByIncline, BioAnimNodeBlendBase, SFXGame )

	public:

		Float BlendDuration; //offset = 224, size = 4
		Float MaxInclineUpAngle; //offset = 228, size = 4
		Float MaxInclineDownAngle; //offset = 232, size = 4
		Bool bForceLevelReferenceAngle: 1; //offset = 236, size = 4
		Float m_fInclineAngle; //offset = 240, size = 4
	};

	class BioAnimNodeBlendByLean: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByLean, BioAnimNodeBlendBase, SFXGame )

	public:

		Float BlendDuration; //offset = 224, size = 4
		Float BlendAcrossDuration; //offset = 228, size = 4
		Float MaxLeanAngle; //offset = 232, size = 4
		Float m_fLeanAngle; //offset = 236, size = 4
		Float m_fLastLeanAngle; //offset = 240, size = 4
		Bool m_bSwitchingLean: 1; //offset = 244, size = 4
	};

	class BioAnimNodeBlendByPosture: public AnimNodeBlend
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByPosture, AnimNodeBlend, SFXGame )

	public:

		Float BlendDuration; //offset = 208, size = 4
	};

	enum EBioAnimNodePowerNotifyActive
	{
		eBioAnimNodePowerNotifyActive_None,
		eBioAnimNodePowerNotifyActive_Casting,
	};

	enum EBioAnimNodePower
	{
		eBioAnimNodePower_Idle,
		eBioAnimNodePower_Casting,
		eBioAnimNodePower_Release,
	};

	class BioAnimNodeBlendByPower: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByPower, AnimNodeBlendList, SFXGame )

	public:

		Byte NotifyActive; //offset = 220, size = 1
		Int LastTag; //offset = 224, size = 4
		Float SliderPosition; //offset = 228, size = 4

		void SendPowerNotification();
	};

	enum EBioReloadAnimNode
	{
		RELOAD_ANIM_NODE_IDLE,
		RELOAD_ANIM_NODE_RELOADING,
	};

	class BioAnimNodeBlendByReload: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByReload, AnimNodeBlendList, SFXGame )

	public:

		Float m_fSliderPosition; //offset = 220, size = 4

		Float GetReloadDuration(, Pawn* ChkPawn, SFXWeapon* Weapon );
	};

	enum EBioAnimNodeBlendByStorm
	{
		eBioAnimNodeBlendByStorm_Idle,
		eBioAnimNodeBlendByStorm_Storm,
	};

	class BioAnimNodeBlendByStorm: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByStorm, AnimNodeBlendList, SFXGame )

	public:

		Float Idle2StormBlendDuration; //offset = 220, size = 4
		Float Storm2IdleBlendDuration; //offset = 224, size = 4
		BioAnimMovementSync* MovementSync; //offset = 228, size = 4
		Float SliderPosition; //offset = 232, size = 4
	};

	enum WeaponAnimState
	{
		WeaponState_Expanded,
		WeaponState_Expanding,
		WeaponState_Collapsing,
	};

	class BioAnimNodeBlendByWeaponAction: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByWeaponAction, AnimNodeBlendList, SFXGame )

	public:

		Float SliderPosition; //offset = 220, size = 4

		void ResetForcedReplayFlag( SFXWeapon* Weapon );
		void ResetInstantChangeFlag( SFXWeapon* Weapon );
	};

	enum EBioAnimNodeBlendByWeaponEquip
	{
		eBioAnimNodeBlendByWeaponEquip_Idle,
		eBioAnimNodeBlendByWeaponEquip_Draw,
	};

	class BioAnimNodeBlendByWeaponEquip: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByWeaponEquip, AnimNodeBlendList, SFXGame )

	public:

		Float IdleToDrawBlendDuration; //offset = 220, size = 4
		Float IdleToHolsterBlendDuration; //offset = 224, size = 4
		Float HolsterToDrawBlendDuration; //offset = 228, size = 4
		Float HolsterToIdleBlendDuration; //offset = 232, size = 4
		Bool bDisabledIK: 1; //offset = 236, size = 4
		Float SliderPosition; //offset = 240, size = 4

		void DrawAnimEnd( Pawn* P, SFXWeapon* Weapon );
		void HolsterAnimEnd( BioPawn* P, SFXWeapon* Weapon );
	};

	class BioAnimNodeBlendDirectional: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendDirectional, BioAnimNodeBlendBase, SFXGame )

	public:

		Float DirDegreesPerSecond; //offset = 224, size = 4
		Float ForeBackBlendTime; //offset = 228, size = 4
		Float RotationDeadzone; //offset = 232, size = 4
		Float m_fDirAngle; //offset = 236, size = 4
		Bool m_bForward: 1; //offset = 240, size = 4
		Bool m_bWasMoving: 1; //offset = 240, size = 4
	};

	enum EBioAnimStartDirection
	{
		eBioAnimDirStart_ForwardRight,
		eBioAnimDirStart_ForwardLeft,
		eBioAnimDirStart_Right,
		eBioAnimDirStart_Left,
	};

	class BioAnimNodeBlendDirStart: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendDirStart, BioAnimNodeBlendBase, SFXGame )

	public:

		Float m_fStartHeading; //offset = 224, size = 4
		Bool m_bIsStarting: 1; //offset = 228, size = 4
		Float LeftStartTime; //offset = 232, size = 4
		Float RightStartTime; //offset = 236, size = 4
	};

	enum EBioAnimNodeFall
	{
		eBioAnimNodeFall_Falling,
		eBioAnimNodeFall_Landing,
	};

	class BioAnimNodeBlendFall: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendFall, AnimNodeBlendList, SFXGame )

	public:

		Bool bRootMotionOverridden: 1; //offset = 220, size = 4
		Float BlendIntoFallingTime; //offset = 224, size = 4
		Float BlendIntoLandingTime; //offset = 228, size = 4
		Float SliderState; //offset = 232, size = 4
	};

	class BioAnimNodeBlendGetUp: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendGetUp, BioAnimNodeBlendBase, SFXGame )

	public:
	};

	enum EBioAnimNodeBlendMovement
	{
		eBioAnimNodeBlendMovement_Idle,
		eBioAnimNodeBlendMovement_Walk,
	};

	class BioAnimNodeBlendMovement: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendMovement, AnimNodeBlendList, SFXGame )

	public:

		Float IdleSpeed; //offset = 220, size = 4
		Float MinWalkSpeed; //offset = 224, size = 4
		Float MidWalkSpeed; //offset = 228, size = 4
		Float MaxWalkSpeed; //offset = 232, size = 4
		Float MinRunSpeed; //offset = 236, size = 4
		Float MidRunSpeed; //offset = 240, size = 4
		Float MaxRunSpeed; //offset = 244, size = 4
		Float IdleTimeout; //offset = 248, size = 4
		Name WalkSynchGroupName; //offset = 252, size = 8
		Name RunSynchGroupName; //offset = 260, size = 8
		Float BlendTimeIdle2Walk; //offset = 268, size = 4
		Float BlendTimeIdle2Run; //offset = 272, size = 4
		Float BlendTimeWalk2Idle; //offset = 276, size = 4
		Float BlendTimeWalk2Run; //offset = 280, size = 4
		Float BlendTimeRun2Idle; //offset = 284, size = 4
		Float BlendTimeRun2Walk; //offset = 288, size = 4
		Float IdleTimer; //offset = 292, size = 4
		Float CurrentSpeed; //offset = 296, size = 4
		Float CurrentAcceleration; //offset = 300, size = 4
		Float CurrentWalkRate; //offset = 304, size = 4
		Float CurrentRunRate; //offset = 308, size = 4
		Float SliderPosition; //offset = 312, size = 4
	};

	enum EBioAnimMoveStop
	{
		eBioAnimMoveStop_StopRight,
		eBioAnimMoveStop_StopLeft,
	};

	class BioAnimNodeBlendMoveStop: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendMoveStop, BioAnimNodeBlendBase, SFXGame )

	public:
	};

	struct BioChildActivateData
	{
		Bool bApplyData: 1; //offset = 0, size = 4
		Float fFinalWeight; //offset = 4, size = 4
		Float fRemainingTime; //offset = 8, size = 4
		Float fTotalBlendTime; //offset = 12, size = 4
	};

	class BioAnimNodeBlendMultiAdditive: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendMultiAdditive, BioAnimNodeBlendBase, SFXGame )

	public:

		Int m_nNumAdditiveChildren; //offset = 224, size = 4
		Map_Mirror m_mapActivateTimes; //offset = 228, size = 20
	};

	enum EBoneBlendTestType
	{
		BLENDTESTTYPE_NONE,
		BLENDTESTTYPE_ANIM,
	};

	enum EBoneBlendType
	{
		BLENDTYPE_ALWAYS,
		BLENDTYPE_ALWAYS_BONE_SWITCH,
		BLENDTYPE_CROSSFADE_BONE_SWITCH,
		BLENDTYPE_SWITCH,
	};

	class BioAnimNodeBlendPerBone: public AnimNodeBlendPerBone
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendPerBone, AnimNodeBlendPerBone, SFXGame )

	public:

		Name BlendName; //offset = 248, size = 8
		Byte BlendType; //offset = 256, size = 1
		Float OverblendFactor; //offset = 260, size = 4
		Float FadeInTime; //offset = 264, size = 4
		Float FadeOutTime; //offset = 268, size = 4
		Array<Name> BioBranchStartBoneName; //offset = 272, size = 12
		Bool m_bNotifiedBlendComplete: 1; //offset = 284, size = 4
		Bool m_bBoneSwitchOn: 1; //offset = 284, size = 4
	};

	class BioAnimNodeBlendPose: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendPose, BioAnimNodeBlendBase, SFXGame )

	public:

		Array<Name> m_aChildAnimsets; //offset = 224, size = 12
		Bool m_bTransitioning: 1; //offset = 236, size = 4
		Float m_fTransEndTime; //offset = 240, size = 4
		Float m_fEndBlendDuration; //offset = 244, size = 4
	};

	struct BioChildPinData
	{
		Float fEndBlendStartTime; //offset = 0, size = 4
		Float fEndBlendDuration; //offset = 4, size = 4
		Float fEndTime; //offset = 8, size = 4
		Bool bPlayUntilNext: 1; //offset = 12, size = 4
		Array<BioGestChainTree*> aChainedTrees; //offset = 16, size = 12
		Bool bUseDynAnimSets: 1; //offset = 28, size = 4
	};

	struct BioEndBlendData
	{
		Float fEndBlendStartTime; //offset = 0, size = 4
		Float fEndBlendDuration; //offset = 4, size = 4
	};

	class BioAnimNodeBlendPoseAndGestures: public BioAnimNodeBlendMultiAdditive
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendPoseAndGestures, BioAnimNodeBlendMultiAdditive, SFXGame )

	public:

		Array<Name> m_aChildAnimsets; //offset = 248, size = 12
		Bool m_bGesturePlaying: 1; //offset = 260, size = 4
		Array<BioChildPinData> m_aChildPinData; //offset = 264, size = 12
	};

	struct BioAnimScalarNodeChildDef
	{
		Name Name; //offset = 0, size = 8
		BioScalarBlendParams BlendParams; //offset = 8, size = 12
	};

	struct BioAnimScalarNodeBehaviorDef
	{
		Array<BioAnimScalarNodeChildDef> Children; //offset = 0, size = 12
		Bool BlendInstant: 1; //offset = 12, size = 4
		Float BlendPctPerSecond; //offset = 16, size = 4
		Float DefaultScalar; //offset = 20, size = 4
		String Description; //offset = 24, size = 12
	};

	class BioAnimNodeBlendScalarBehavior: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendScalarBehavior, Object, SFXGame )

	public:

		Array<BioAnimScalarNodeBehaviorDef> m_aNodeDefinitions; //offset = 60, size = 12
	};

	struct BioScalarPrecomputedValues
	{
		Float fRangeLowerRatio; //offset = 0, size = 4
		Float fRangeUpperRatio; //offset = 4, size = 4
	};

	struct BioScalarBlendParams
	{
		Float Min; //offset = 0, size = 4
		Float Peak; //offset = 4, size = 4
		Float Max; //offset = 8, size = 4
	};

	class BioAnimNodeBlendScalar: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendScalar, BioAnimNodeBlendBase, SFXGame )

	public:

		BioAnimNodeBlendScalarBehavior* m_oBehavior; //offset = 224, size = 4
		Array<BioScalarBlendParams> m_aChildBlendParams; //offset = 228, size = 12
		Bool m_bBlendInstant: 1; //offset = 240, size = 4
		Bool m_bUseBlendSpanTime: 1; //offset = 240, size = 4
		Float m_fBlendPctPerSecond; //offset = 244, size = 4
		Float m_fBlendSpanTime; //offset = 248, size = 4
		Float m_fRangeMin; //offset = 252, size = 4
		Float m_fRangeMax; //offset = 256, size = 4
		Float m_fUnitsPerSecond; //offset = 260, size = 4
		Float m_fCurrentScalar; //offset = 264, size = 4
		Float m_fTargetScalar; //offset = 268, size = 4
		String m_sDescription; //offset = 272, size = 12
		Array<BioScalarPrecomputedValues> m_aChildPrecomputes; //offset = 284, size = 12
	};

	enum EBioAnimNodeBlendScalarMoveAxisDirMode
	{
		BScMvAxisDirMode_WorldRotation,
		BScMvAxisDirMode_WorldVelDir,
		BScMvAxisDirMode_WorldAccelDir,
	};

	enum EBioAnimNodeBlendScalarMoveAxisDir
	{
		BScMvAxisDir_X,
		BScMvAxisDir_Y,
	};

	enum EBioAnimNodeBlendScalarMoveAxis
	{
		BScMvAxis_All,
		BScMvAxis_2D,
		BScMvAxis_X,
	};

	enum EBioAnimNodeBlendScalarMoveSpeedStates
	{
		BScMvSS_Idle,
		BScMvSS_Walk,
		BScMvSS_Run,
	};

	enum EBioAnimNodeBlendScalarMovementBehavior
	{
		BScMv_None,
		BScMv_TurnAngle,
		BScMv_SpeedVelocity,
	};

	class BioAnimNodeBlendScalarMovementBehavior: public BioAnimNodeBlendScalarBehavior
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendScalarMovementBehavior, BioAnimNodeBlendScalarBehavior, SFXGame )

	public:

		Byte MovementBehavior; //offset = 72, size = 1
		Byte MoveAxis; //offset = 73, size = 1
		Byte AxisDir; //offset = 74, size = 1
		Byte AxisDirMode; //offset = 75, size = 1
		Bool bUseSprint: 1; //offset = 76, size = 4
		Bool bUseSnapshotSpeed: 1; //offset = 76, size = 4
		Bool bUseSnapshotStartSpeed: 1; //offset = 76, size = 4
		Bool bUseLocalSpace: 1; //offset = 76, size = 4
	};

	enum EBioAnimSkidTurn
	{
		eBioAnimSkidTurn_StartRight,
		eBioAnimSkidTurn_StartLeft,
		eBioAnimSkidTurn_TurnRightNear,
		eBioAnimSkidTurn_TurnRightFar,
	};

	class BioAnimNodeBlendSkidTurn: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendSkidTurn, BioAnimNodeBlendBase, SFXGame )

	public:

		Float m_fSkidHeading; //offset = 224, size = 4
		Bool m_bIsSkidding: 1; //offset = 228, size = 4
		Bool m_bFinishSkidStarted: 1; //offset = 228, size = 4
		Float RightNearAngle; //offset = 232, size = 4
		Float RightFarAngle; //offset = 236, size = 4
		Float LeftNearAngle; //offset = 240, size = 4
		Float LeftFarAngle; //offset = 244, size = 4
		Float LeftStartTime; //offset = 248, size = 4
		Float RightStartTime; //offset = 252, size = 4
	};

	enum EBioAnim_SpeedType
	{
		eBioAnim_SpeedStandard,
		eBioAnim_SpeedStarting,
	};

	class BioAnimNodeBlendSpeed: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendSpeed, BioAnimNodeBlendBase, SFXGame )

	public:

		Float BlendTimeToIdle; //offset = 224, size = 4
		Float BlendTimeFromIdle; //offset = 228, size = 4
		Float BlendTimeMoving; //offset = 232, size = 4
		Float WalkSpeed; //offset = 236, size = 4
		Float RunSpeed; //offset = 240, size = 4
		Float WalkRateScaled; //offset = 244, size = 4
		Float RunRateScaled; //offset = 248, size = 4
		Byte SpeedType; //offset = 252, size = 1
		Float m_fStartSpeed; //offset = 256, size = 4
		Float m_fCurrentSpeed; //offset = 260, size = 4
		Bool m_bIsStarting: 1; //offset = 264, size = 4
		Bool m_bIsStarted: 1; //offset = 264, size = 4
		Float m_fStartCheckTime; //offset = 268, size = 4
	};

	struct BioAnimStateNodeChildDef
	{
		Name Name; //offset = 0, size = 8
		Float DefaultWeight; //offset = 8, size = 4
		BioAnimBlendParams BlendParams; //offset = 12, size = 16
	};

	struct BioAnimStateNodeBehaviorDef
	{
		Array<BioAnimStateNodeChildDef> Children; //offset = 0, size = 12
		String Description; //offset = 12, size = 12
	};

	class BioAnimNodeBlendStateBehavior: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendStateBehavior, Object, SFXGame )

	public:

		Array<BioAnimStateNodeBehaviorDef> m_aNodeDefinitions; //offset = 60, size = 12
		Float m_fQueryPlayTime; //offset = 72, size = 4
	};

	enum EBioBlendStatePlayAction
	{
		eBioBlendStatePlayAction_NoAction,
		eBioBlendStatePlayAction_Play,
		eBioBlendStatePlayAction_Stop,
		eBioBlendStatePlayAction_Reset,
	};

	enum EBioBlendStatePlayMode
	{
		eBioBlendStatePlayMode_None,
		eBioBlendStatePlayMode_OneShot,
		eBioBlendStatePlayMode_Looping,
	};

	struct BioAnimBlendParams
	{
		Array<Float> BlendToChildTimes; //offset = 0, size = 12
		Byte PlayMode; //offset = 12, size = 1
	};

	class BioAnimNodeBlendState: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendState, BioAnimNodeBlendBase, SFXGame )

	public:

		Int m_nActiveChild; //offset = 224, size = 4
		BioAnimNodeBlendStateBehavior* m_oBehavior; //offset = 228, size = 4
		Array<BioAnimBlendParams> m_aChildBlendParams; //offset = 232, size = 12
		String m_sDescription; //offset = 244, size = 12
		BioAnimCheckBlendOut* m_oBlendOut; //offset = 256, size = 4
	};

	enum EBioArtPlaceableActionStates
	{
		APAS_Default,
		APAS_Matinee,
	};

	enum EBioPawnAnimActiveStates
	{
		PAActiveS_Active,
		PAActiveS_ActiveToInactive,
		PAActiveS_InactiveToActive,
	};

	enum EBioPawnAnimActionStates
	{
		PAAS_Posture,
		PAAS_Dying,
		PAAS_Death,
		PAAS_Matinee,
	};

	enum EBioAnimNodeBlendStateActionBehavior
	{
		BSAct_None,
		BSAct_PawnState,
		BSAct_PawnGesturesState,
		BSAct_ActiveState,
	};

	class BioAnimNodeBlendStateActionBehavior: public BioAnimNodeBlendStateBehavior
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendStateActionBehavior, BioAnimNodeBlendStateBehavior, SFXGame )

	public:

		Byte ActionBehavior; //offset = 76, size = 1
		Bool m_bPlayedRecoverAnim: 1; //offset = 80, size = 4
	};

	enum EBioAnimNodeBlendStateCombatBehavior
	{
		BSCbt_None,
		BSCbt_CoverSwitch,
		BSCbt_CoverDirection,
		BSCbt_CoverState,
		BSCbt_CoverBlocked,
	};

	class BioAnimNodeBlendStateCombatBehavior: public BioAnimNodeBlendStateBehavior
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendStateCombatBehavior, BioAnimNodeBlendStateBehavior, SFXGame )

	public:

		Byte CombatBehavior; //offset = 76, size = 1
		Bool bUseCoverAnimState: 1; //offset = 80, size = 4
		Bool bOnlyDuringWeaponSwitch: 1; //offset = 80, size = 4
		Bool bOnlyDuringNoOffensiveAction: 1; //offset = 80, size = 4
	};

	enum EBioAnimNodeBlendStateMoveAxisDirMode
	{
		BSMoveAxisDirMode_WorldRotation,
		BSMoveAxisDirMode_WorldVelDir,
		BSMoveAxisDirMode_WorldAccelDir,
	};

	enum EBioAnimNodeBlendStateMoveAxisDir
	{
		BSMoveAxisDir_X,
		BSMoveAxisDir_Y,
	};

	enum EBioMovementSpeedStates
	{
		MSS_Idle,
		MSS_Walk,
		MSS_Run,
	};

	enum EBioAnimNodeBlendStateMovementBehavior
	{
		BSMove_None,
		BSMove_SpeedVelocity,
		BSMove_SpeedTacticalVelocity,
		BSMove_ScaleRate,
		BSMove_ScaleRateByWalkSpeed,
		BSMove_ScaleRateByRunSpeed,
		BSMove_ScaleRateBySprintSpeed,
		BSMove_ScaleRateByTacticalWalkSpeed,
		BSMove_ScaleRateByTacticalRunSpeed,
		BSMove_LookAtTurning,
	};

	class BioAnimNodeBlendStateMovementBehavior: public BioAnimNodeBlendStateBehavior
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendStateMovementBehavior, BioAnimNodeBlendStateBehavior, SFXGame )

	public:

		Byte MovementBehavior; //offset = 76, size = 1
		Byte AxisDir; //offset = 77, size = 1
		Byte AxisDirMode; //offset = 78, size = 1
		Float BlendDownPerc; //offset = 80, size = 4
		Bool bUseSprint: 1; //offset = 84, size = 4
		Bool bUseSnapshotSpeed: 1; //offset = 84, size = 4
		Bool bUseSnapshotStartSpeed: 1; //offset = 84, size = 4
		Bool bUseDirStartControl: 1; //offset = 84, size = 4
		Bool m_bIsStarted: 1; //offset = 84, size = 4
		Bool m_bInTakeoff: 1; //offset = 84, size = 4
		Bool m_bInLanding: 1; //offset = 84, size = 4
		Bool m_bPlayedAnim: 1; //offset = 84, size = 4
		Bool m_bRootMotionOn: 1; //offset = 84, size = 4
		Float ScaleByValue; //offset = 88, size = 4
		Float WalkRate; //offset = 92, size = 4
		Float RunRate; //offset = 96, size = 4
		Float BlendResetWeight; //offset = 100, size = 4
		Float m_fStartCheckTime; //offset = 104, size = 4
		Int m_nLastPhys; //offset = 108, size = 4
	};

	enum EBioAnimNodeBlendStrafe
	{
		eBioAnimNodeBlendStrafe_Forward,
		eBioAnimNodeBlendStrafe_Backward,
		eBioAnimNodeBlendStrafe_Left,
	};

	class BioAnimNodeBlendStrafe: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendStrafe, AnimNodeBlendBase, SFXGame )

	public:

		Name SynchGroupName; //offset = 196, size = 8
		Float BlendSpeed; //offset = 204, size = 4
		Float IdleRelativePos; //offset = 208, size = 4
		Float IdleAngle; //offset = 212, size = 4
		Float DirAngle; //offset = 216, size = 4
		BioAnimMovementSync* MovementSync; //offset = 220, size = 4
		Float SliderPosition; //offset = 224, size = 4
	};

	enum EBioAnimNodeBlendTurn
	{
		eBioAnimNodeBlendTurn_Idle,
		eBioAnimNodeBlendTurn_TurnLeft,
	};

	class BioAnimNodeBlendTurn: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendTurn, AnimNodeBlendList, SFXGame )

	public:

		Float BlendTime; //offset = 220, size = 4
		Float YawTurnTriggerDegrees; //offset = 224, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 228, size = 4
		Float SliderPosition; //offset = 232, size = 4
	};

	class BioAnimNodeCameraShake: public BioAnimNodeBlendAdditive
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeCameraShake, BioAnimNodeBlendAdditive, SFXGame )

	public:

		BioCameraShake* m_cameraShake; //offset = 228, size = 4
		Float m_intensity; //offset = 232, size = 4
		Float m_time; //offset = 236, size = 4
		Bool m_isLoopingForever: 1; //offset = 240, size = 4
		Bool m_isFadingIn: 1; //offset = 240, size = 4
		Bool m_hasFadeOut: 1; //offset = 240, size = 4
		Bool m_isFadingOut: 1; //offset = 240, size = 4
		Float m_fadeInTime; //offset = 244, size = 4
		Float m_fadeOutTime; //offset = 248, size = 4
	};

	enum EBioAnimNodeCombatModeState
	{
		BIO_ANIM_NODE_COMBAT_MODE_STATE_NONCOMBAT,
		BIO_ANIM_NODE_COMBAT_MODE_STATE_COMBAT,
		BIO_ANIM_NODE_COMBAT_MODE_STATE_ANIMATING_TO_COMBAT,
		BIO_ANIM_NODE_COMBAT_MODE_STATE_ANIMATING_TO_NONCOMBAT,
	};

	enum EBioAnimNodeCombatModeChild
	{
		BIO_ANIM_NODE_COMBAT_MODE_CHILD_NONCOMBAT,
		BIO_ANIM_NODE_COMBAT_MODE_CHILD_COMBAT,
		BIO_ANIM_NODE_COMBAT_MODE_CHILD_ENTERCOMBAT,
	};

	class BioAnimNodeCombatMode: public BioAnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeCombatMode, BioAnimNodeBlendBase, SFXGame )

	public:

		Float m_blendIntoTransitionDuration; //offset = 224, size = 4
		Float m_blendOutOfTransitionDuration; //offset = 228, size = 4
		Float m_blendFromNonCombatToCombatDuration; //offset = 232, size = 4
		Float m_blendFromCombatToNonCombatDuration; //offset = 236, size = 4
		Byte m_currentState; //offset = 240, size = 1
		Bool m_isInitialStateDetermined: 1; //offset = 244, size = 4
	};

	enum EBioAnimNodeCover2Actions
	{
		eBioAnimNodeCover2Actions_Default,
		eBioAnimNodeCover2Actions_Lean,
		eBioAnimNodeCover2Actions_PopUp,
	};

	class BioAnimNodeCover2Actions: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeCover2Actions, AnimNodeBlendList, SFXGame )

	public:

		Float Default2LeanBlendDuration; //offset = 220, size = 4
		Float Lean2DefaultBlendDuration; //offset = 224, size = 4
		Float Default2PopupBlendDuration; //offset = 228, size = 4
		Float Popup2DefaultBlendDuration; //offset = 232, size = 4
		Float Default2PeekBlendDuration; //offset = 236, size = 4
		Float Peek2DefaultBlendDuration; //offset = 240, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 244, size = 4
		Float SliderPosition; //offset = 248, size = 4
	};

	enum EBioAnimNodeCover2ChangeDirection
	{
		eBioAnimNodeCover2ChangeDirection_Idle,
		eBioAnimNodeCover2ChangeDirection_TransitionToMirror,
	};

	class BioAnimNodeCover2ChangeDirection: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeCover2ChangeDirection, AnimNodeBlendList, SFXGame )

	public:

		Float IdleToTransitionBlendDuration; //offset = 220, size = 4
		Float TransitionToIdleBlendDuration; //offset = 224, size = 4
		Byte CurrentCoverDirection; //offset = 228, size = 1
		Byte PendingCoverDirection; //offset = 229, size = 1
		Bool bBlocking: 1; //offset = 232, size = 4
		Float SliderPosition; //offset = 236, size = 4
	};

	enum EBioAnimNodeCover2Move
	{
		eBioAnimNodeCover2Move_Idle,
		eBioAnimNodeCover2Move_Move,
	};

	class BioAnimNodeCover2Move: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeCover2Move, AnimNodeBlendList, SFXGame )

	public:

		Float Idle2MoveBlendDuration; //offset = 220, size = 4
		Float Move2IdleBlendDuration; //offset = 224, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 228, size = 4
		Float SliderPosition; //offset = 232, size = 4
	};

	enum EBioAnimNodeCover2Neutral
	{
		eBioAnimNodeCover2Neutral_Idle,
		eBioAnimNodeCover2Neutral_Active,
	};

	class BioAnimNodeCover2Neutral: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeCover2Neutral, AnimNodeBlendList, SFXGame )

	public:

		Float BlendTime; //offset = 220, size = 4
		Float SliderPosition; //offset = 224, size = 4
	};

	enum EBioAnimNodeCover2Transition
	{
		eBioAnimNodeCover2Transition_Intro,
		eBioAnimNodeCover2Transition_Body,
	};

	class BioAnimNodeCover2Transition: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeCover2Transition, AnimNodeBlendList, SFXGame )

	public:

		Bool IntroIsBlocking: 1; //offset = 220, size = 4
		Bool OutroIsBlocking: 1; //offset = 220, size = 4
		Bool bStopInputOnBlockingTransitions: 1; //offset = 220, size = 4
		Float Intro2BodyBlendDuration; //offset = 224, size = 4
		Float Body2OutroBlendDuration; //offset = 228, size = 4
		Float Intro2OutroBlendDuration; //offset = 232, size = 4
		Float Outro2IntroBlendDuration; //offset = 236, size = 4
		Byte IntroRootMotionMode; //offset = 240, size = 1
		Byte IntroRootRotationMode; //offset = 241, size = 1
		Byte OutroRootMotionMode; //offset = 242, size = 1
		Byte OutroRootRotationMode; //offset = 243, size = 1
		Byte CurrentState; //offset = 244, size = 1
		Byte RootMotionMode; //offset = 245, size = 1
		Byte RootRotationMode; //offset = 246, size = 1
		Bool bRequestedBlendOut: 1; //offset = 248, size = 4
		Bool bCanceledBlendOut: 1; //offset = 248, size = 4
		Bool bSkipIntro: 1; //offset = 248, size = 4
		Bool bBlocking: 1; //offset = 248, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 252, size = 4
		Float SliderPosition; //offset = 256, size = 4

		void IgnorePlayerInput( BioPawn* pPawn, Bool bIgnore, BioPlayerController* pPlayerController );
	};

	class BioAnimNodeCover2Type: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeCover2Type, AnimNodeBlendList, SFXGame )

	public:

		Float SliderPosition; //offset = 220, size = 4
		Byte LastCoverAction; //offset = 224, size = 1
	};

	class BioAnimNodeFrame: public AnimNode
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeFrame, AnimNode, SFXGame )

	public:

		Array<BoneAtom> m_FrameBoneData; //offset = 180, size = 12
		Bool m_bIsFrameDataValid: 1; //offset = 192, size = 4
		Bool m_bCaptureOnRelevant: 1; //offset = 192, size = 4

		void CaptureAnimFrame();
	};

	enum EBioAnimNodeLocomotion
	{
		eBioAnimNodeLocomotion_Idle,
		eBioAnimNodeLocomotion_MoveStart,
		eBioAnimNodeLocomotion_Moving,
		eBioAnimNodeLocomotion_MoveStop,
	};

	class BioAnimNodeLocomotion: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeLocomotion, AnimNodeBlendList, SFXGame )

	public:

		Float ToIdleBlendDuration; //offset = 220, size = 4
		Float ToMovingBlendDuration; //offset = 224, size = 4
		Float ToStopBlendDuration; //offset = 228, size = 4
		Float IdleToStartBlendDuration; //offset = 232, size = 4
		Float StopToStartBlendDuration; //offset = 236, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 240, size = 4
		Array<BoneAtom> BoneAtoms; //offset = 244, size = 12
		Array<Byte> BoneList; //offset = 256, size = 12
		Float SliderState; //offset = 268, size = 4
		Float SliderSpeed; //offset = 272, size = 4
	};

	enum EBioAnimNodeLocomotionMoving
	{
		eBioAnimNodeLocomotionMoving_Fwd,
		eBioAnimNodeLocomotionMoving_LeanLeft,
		eBioAnimNodeLocomotionMoving_LeanRight,
	};

	class BioAnimNodeLocomotionMoving: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeLocomotionMoving, AnimNodeBlendBase, SFXGame )

	public:

		Name SynchGroupName; //offset = 196, size = 8
		Float BlendSpeed; //offset = 204, size = 4
		Float BlendSpeedLeanIn; //offset = 208, size = 4
		Float BlendSpeedLeanOut; //offset = 212, size = 4
		Float AngleLeanLeft; //offset = 216, size = 4
		Float AngleLeanRight; //offset = 220, size = 4
		Float AngleAscend; //offset = 224, size = 4
		Float AngleDescend; //offset = 228, size = 4
		Float MinSpeed; //offset = 232, size = 4
		Float MidSpeed; //offset = 236, size = 4
		Float MaxSpeed; //offset = 240, size = 4
		BioAnimMovementSync* MovementSync; //offset = 244, size = 4
		Float Lean; //offset = 248, size = 4
		Float Incline; //offset = 252, size = 4
		Float SliderLean; //offset = 256, size = 4
		Float SliderIncline; //offset = 260, size = 4
	};

	enum EBioAnimNodeLocomotionSpeed
	{
		eBioAnimNodeLocomotionSpeed_Idle,
		eBioAnimNodeLocomotionSpeed_Walk,
	};

	class BioAnimNodeLocomotionSpeed: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeLocomotionSpeed, AnimNodeBlendList, SFXGame )

	public:

		Float BlendTime; //offset = 220, size = 4
		Float RunSpeed; //offset = 224, size = 4
		Float WalkSpeed; //offset = 228, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 232, size = 4
	};

	enum EBioAnimNodeLocomotionStart
	{
		eBioAnimNodeLocomotionStart_ForwardRight,
		eBioAnimNodeLocomotionStart_ForwardLeft,
		eBioAnimNodeLocomotionStart_Right,
		eBioAnimNodeLocomotionStart_Left,
	};

	class BioAnimNodeLocomotionStart: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeLocomotionStart, AnimNodeBlendBase, SFXGame )

	public:

		Name SynchGroupName; //offset = 196, size = 8
		Float BlendOutRelPos[6]; //offset = 204, size = 4
		Float FreeRotationRelPos[6]; //offset = 228, size = 4
		Float LeftFootNormalizedRange[2]; //offset = 252, size = 4
		BioAnimMovementSync* MovementSync; //offset = 260, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 264, size = 4
		Bool bBlendingOut: 1; //offset = 268, size = 4
		Bool bOverrideRMM: 1; //offset = 268, size = 4
		Bool bOverrideRMR: 1; //offset = 268, size = 4
		Float BlendAngle; //offset = 272, size = 4
		Int StateTag; //offset = 276, size = 4
		Float SliderDirAngle; //offset = 280, size = 4
	};

	enum EBioAnimNodeLocomotionStop
	{
		eBioAnimNodeLocomotionStop_LeftFoot,
		eBioAnimNodeLocomotionStop_RightFoot,
	};

	class BioAnimNodeLocomotionStop: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeLocomotionStop, AnimNodeBlendList, SFXGame )

	public:

		Float LeftFootNormalizedRange[2]; //offset = 220, size = 4
		Float BlendOutTime; //offset = 228, size = 4
		BioAnimCheckBlendOut* BlendOut; //offset = 232, size = 4
		BioAnimMovementSync* MovementSync; //offset = 236, size = 4
		Bool bOverrideRootMotion: 1; //offset = 240, size = 4
		Float SliderPosition; //offset = 244, size = 4
	};

	class BioAnimNodeRandom: public AnimNodeRandom
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeRandom, AnimNodeRandom, SFXGame )

	public:

		Bool bForceChildOnActive: 1; //offset = 240, size = 4
		Int nChildOnActive; //offset = 244, size = 4
	};

	class BioAnimNodeSequence: public AnimNodeSequence
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeSequence, AnimNodeSequence, SFXGame )

	public:

		Bool bRandomizeStartTime: 1; //offset = 236, size = 4
		Name DF_CurrentTime; //offset = 240, size = 8
		Name DF_Rate; //offset = 248, size = 8
		Name DF_SequenceLength; //offset = 256, size = 8
		Pointer m_pDFCurTimeProp; //offset = 264, size = 4
		Pointer m_pDFRateProp; //offset = 268, size = 4
		Pointer m_pDFSeqLenProp; //offset = 272, size = 4
		Vector m_vTotalTranslation; //offset = 276, size = 12
	};

	struct AnimByRotation
	{
		Rotator DesiredRotation; //offset = 0, size = 12
		Name AnimName; //offset = 12, size = 8
		AnimSequence* AnimSeq; //offset = 20, size = 4
	};

	class BioAnimNodeSequenceByBoneRotation: public AnimNodeSequence
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeSequenceByBoneRotation, AnimNodeSequence, SFXGame )

	public:

		Name BoneName; //offset = 236, size = 8
		Byte BoneAxis; //offset = 244, size = 1
		Array<AnimByRotation> AnimList; //offset = 248, size = 12
	};

	class BioAnimNodeSequenceMirror: public AnimNodeSequence
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeSequenceMirror, AnimNodeSequence, SFXGame )

	public:

		Name MirroredAnimSeqName; //offset = 236, size = 8
		Bool bUseMirrored: 1; //offset = 244, size = 4
		AnimSequence* MirroredAnimSeq; //offset = 248, size = 4
		Int MirroredAnimLinkupIndex; //offset = 252, size = 4
		AnimSequence* DefaultAnimSeq; //offset = 256, size = 4
		Int DefaultAnimLinkupIndex; //offset = 260, size = 4
	};

	class BioAnimNotifyEvent: public AnimNotify
	{
		DECLARE_PACKAGE_CLASS( BioAnimNotifyEvent, AnimNotify, SFXGame )

	public:

		Name EventName; //offset = 60, size = 8
		Bool IsGlobal: 1; //offset = 68, size = 4
	};

	class BioAnimNotifyVFX: public AnimNotify
	{
		DECLARE_PACKAGE_CLASS( BioAnimNotifyVFX, AnimNotify, SFXGame )

	public:

		Name m_nmVisualEffectLabel; //offset = 60, size = 8
	};

	class BioArtPlaceableBlendByTransition: public AnimNodeBlend
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableBlendByTransition, AnimNodeBlend, SFXGame )

	public:

		Bool bTransitioning: 1; //offset = 208, size = 4
		Bool bTransitionAllowed: 1; //offset = 208, size = 4
		AnimNodeSequence* aTransition; //offset = 212, size = 4
		AnimNodeSequence* aState; //offset = 216, size = 4

		void GotoToState( Name LoopAnim );
		void TransitionToState( Name TransAnim, Name LoopAnim );
	};

	class BioSkelControlAdditiveLookAt: public SkelControlLookAt
	{
		DECLARE_PACKAGE_CLASS( BioSkelControlAdditiveLookAt, SkelControlLookAt, SFXGame )

	public:

		Bool bSeparateUpDownLimit: 1; //offset = 264, size = 4
		Float MaxAngleUpDown; //offset = 268, size = 4
	};

	class BioPawnLookAtController: public BioSkelControlAdditiveLookAt
	{
		DECLARE_PACKAGE_CLASS( BioPawnLookAtController, BioSkelControlAdditiveLookAt, SFXGame )

	public:

		Bool m_bDoAdditive: 1; //offset = 272, size = 4
		Bool m_bAnimFirst: 1; //offset = 272, size = 4
		Bool m_bResetTargetLocation: 1; //offset = 272, size = 4
		Bool m_bDisabling: 1; //offset = 272, size = 4
		Bool m_RootAnimBoneLookAtInverted: 1; //offset = 272, size = 4
		Bool m_RootAnimBoneUpInverted: 1; //offset = 272, size = 4
		Bool m_bTargetReached: 1; //offset = 272, size = 4
		Bool m_bRootBoneYawOnly: 1; //offset = 272, size = 4
		Actor* m_pTargetActor; //offset = 276, size = 4
		SkeletalMeshComponent* m_pTargetMesh; //offset = 280, size = 4
		Int m_nTargetBoneIndex; //offset = 284, size = 4
		Float m_fDelayTimer; //offset = 288, size = 4
		Pointer mc_pDefinition; //offset = 292, size = 4
		Matrix m_mControlledRefPose; //offset = 304, size = 64
		Int m_nRootAnimBoneIndex; //offset = 368, size = 4
		Byte m_RootAnimBoneLookAtAxis; //offset = 372, size = 1
		Byte m_RootAnimBoneUpAxis; //offset = 373, size = 1
		Float m_fPrevAngVelocity; //offset = 376, size = 4
		Float m_fLimitZoneAngle; //offset = 380, size = 4
	};

	struct TurretConstraintData
	{
		Int PitchConstraint; //offset = 0, size = 4
		Int YawConstraint; //offset = 4, size = 4
		Int RollConstraint; //offset = 8, size = 4
	};

	class BioSkelControl_TurretConstrained: public SkelControlSingleBone
	{
		DECLARE_PACKAGE_CLASS( BioSkelControl_TurretConstrained, SkelControlSingleBone, SFXGame )

	public:

		Bool bConstrainPitch: 1; //offset = 200, size = 4
		Bool bConstrainYaw: 1; //offset = 200, size = 4
		Bool bConstrainRoll: 1; //offset = 200, size = 4
		Bool bInvertPitch: 1; //offset = 200, size = 4
		Bool bInvertYaw: 1; //offset = 200, size = 4
		Bool bInvertRoll: 1; //offset = 200, size = 4
		TurretConstraintData MaxAngle; //offset = 204, size = 12
		TurretConstraintData MinAngle; //offset = 216, size = 12
		Float LagDegreesPerSecond; //offset = 228, size = 4
		Float m_fLagScale; //offset = 232, size = 4
		Rotator DesiredBoneRotation; //offset = 236, size = 12
	};

	enum ESFXDoorState
	{
		EDS_Closed,
		EDS_Open,
		EDS_Hackable,
	};

	enum ESFXDoorType
	{
		EDT_Manual,
		EDT_Proximity,
		EDT_AutoEntrance,
	};

	class SFXDoor: public SkeletalMeshActor
	{
		DECLARE_PACKAGE_CLASS( SFXDoor, SkeletalMeshActor, SFXGame )

	public:

		Byte m_CurrentDoorState; //offset = 524, size = 1
		Byte m_PreviousDoorState; //offset = 525, size = 1
		Byte m_DoorType; //offset = 526, size = 1
		Byte Region; //offset = 527, size = 1
		Byte Plot; //offset = 528, size = 1
		Byte Int; //offset = 529, size = 1
		Bool m_bOpenWhenInteractedWhileUnlocked: 1; //offset = 532, size = 4
		Bool bSaveMe: 1; //offset = 532, size = 4
		Array<SFXDoorMarker*> m_aDoorMarker; //offset = 536, size = 12
		Int m_nIndex; //offset = 548, size = 4
		String m_sVarName; //offset = 552, size = 12
		Int m_nPrevRegionIndex; //offset = 564, size = 4
		Int m_nPrevPlotIndex; //offset = 568, size = 4
		String m_sRefName; //offset = 572, size = 12
		Name m_TransitionOpen; //offset = 584, size = 8
		Name m_TransitionClose; //offset = 592, size = 8
		Array<Name> m_aIconSocket; //offset = 600, size = 12
		BioVFXTemplate* m_IconTemplateClosed; //offset = 612, size = 4
		BioVFXTemplate* m_IconTemplateHackable; //offset = 616, size = 4
		BioVFXTemplate* m_IconTemplatePlotLocked; //offset = 620, size = 4
		BioVFXTemplate* m_IconTemplateOpenTransition; //offset = 624, size = 4
		m_srTargetTipTextClosed m_srTargetTipTextClosed; //offset = 628, size = 4
		m_srTargetTipTextHackLocked m_srTargetTipTextHackLocked; //offset = 632, size = 4
		m_srTargetTipTextPlotLocked m_srTargetTipTextPlotLocked; //offset = 636, size = 4
		WwiseEvent* m_Wwise_Transition_Open; //offset = 640, size = 4
		WwiseEvent* m_Wwise_Transition_Close; //offset = 644, size = 4
		WwiseEvent* m_Wwise_GUI_Success_Opening; //offset = 648, size = 4
		WwiseEvent* m_Wwise_GUI_Failure_PlotLocked; //offset = 652, size = 4
		WwiseEvent* m_Wwise_GUI_Failure_HackLocked; //offset = 656, size = 4
		WwiseEvent* m_Wwise_GUI_Kismet_Locked; //offset = 660, size = 4
		WwiseEvent* m_Wwise_GUI_Kismet_UnLocked; //offset = 664, size = 4
		WwiseEvent* m_Wwise_GUI_Kismet_Enabled; //offset = 668, size = 4
		WwiseEvent* m_Wwise_GUI_Kismet_Disabled; //offset = 672, size = 4
		Array<BioVisualEffect*> m_aCurrentIconVFX; //offset = 676, size = 12
		Bool m_bIsTransitioning: 1; //offset = 688, size = 4
		Bool m_ProcessPendingState: 1; //offset = 688, size = 4
		Byte m_PendingDoorState; //offset = 692, size = 1
		SkeletalMeshComponent* EditorMesh; //offset = 696, size = 4
		Guid MyGuid; //offset = 700, size = 16

		void RestoreDoorStates( BioGlobalVariableTable* oGV, Int nPlotState, Int nCurrentState, Int nPrevState );
		void SaveDoorStates( BioGlobalVariableTable* oGV, Int nCombined, Int nCurrentState, Int nPrevState );
		void PlayWiseEvent( WwiseEvent* oWwiseEvent );
		void SetDoorMarkerState( Bool bOpen, Int I );
		void OnTransitionEnd();
		void SetDoorIcon( BioVFXTemplate* oVFXTemplate, BioVisualEffect* Effect, Name nmSocket );
		void TriggerInteraction( Actor* EventInstigator, Int I );
		void TriggerStateChange( Actor* EventInstigator, Int I );
		void PostBeginPlay( AnimNodeSequence* SeqNode );
		Bool CloseDoor( Bool bInstant );
		Bool OpenDoor( Bool bInstant );
		void SetDoorState( Byte ToState, Actor* User, Bool bInstantTransition );
		void PlayAnim( Name InAnimSeqName, Bool bSkipToEnd, AnimNodeSequence* SeqNode );
		void OnUse( Actor* User );
	};

	class SFXGoreActor: public SkeletalMeshActor
	{
		DECLARE_PACKAGE_CLASS( SFXGoreActor, SkeletalMeshActor, SFXGame )

	public:

		void CreateGoreActor( Pawn* Pawn, Name BoneName );
		void SwitchBodiesBelow( Name ParentBoneName, SkeletalMeshComponent* FromSkelComp, SkeletalMeshComponent* ToSkelComp, PhysicsAssetInstance* FromInst, PhysicsAssetInstance* ToInst );
		void CopyBindPose( BioPawn* Pawn );
	};

	struct SMATextureParameter
	{
		Name ParameterName; //offset = 0, size = 8
		Texture* Parameter; //offset = 8, size = 4
		Name Group; //offset = 12, size = 8
	};

	struct SMAScalarParameter
	{
		Name ParameterName; //offset = 0, size = 8
		Float Parameter; //offset = 8, size = 4
		Name Group; //offset = 12, size = 8
	};

	struct SMAVectorParameter
	{
		Name ParameterName; //offset = 0, size = 8
		LinearColor Parameter; //offset = 8, size = 16
		Name Group; //offset = 24, size = 8
	};

	class SFXSkeletalMeshActor: public SkeletalMeshActor
	{
		DECLARE_PACKAGE_CLASS( SFXSkeletalMeshActor, SkeletalMeshActor, SFXGame )

	public:

		Array<SMAVectorParameter> VectorParameters; //offset = 524, size = 12
		Array<SMAScalarParameter> ScalarParameters; //offset = 536, size = 12
		Array<SMATextureParameter> TextureParameters; //offset = 548, size = 12
		SkeletalMeshComponent* HeadMesh; //offset = 560, size = 4
		SkeletalMeshComponent* HairMesh; //offset = 564, size = 4
		BioMorphFace* MorphHead; //offset = 568, size = 4
		Bool UpdateSkelWhenNotRendered: 1; //offset = 572, size = 4
		Bool bHasWrinkles: 1; //offset = 572, size = 4
		SkeletalMeshComponent* EditorBody; //offset = 576, size = 4
		SkeletalMeshComponent* EditorHead; //offset = 580, size = 4
		SkeletalMeshComponent* EditorHair; //offset = 584, size = 4
	};

	class SFXSkeletalMeshActorMAT: public SkeletalMeshActorMAT
	{
		DECLARE_PACKAGE_CLASS( SFXSkeletalMeshActorMAT, SkeletalMeshActorMAT, SFXGame )

	public:

		Array<SMAVectorParameter> VectorParameters; //offset = 536, size = 12
		Array<SMAScalarParameter> ScalarParameters; //offset = 548, size = 12
		Array<SMATextureParameter> TextureParameters; //offset = 560, size = 12
		SkeletalMeshComponent* HeadMesh; //offset = 572, size = 4
		SkeletalMeshComponent* HairMesh; //offset = 576, size = 4
		BioMorphFace* MorphHead; //offset = 580, size = 4
		Bool UpdateSkelWhenNotRendered: 1; //offset = 584, size = 4
		Bool bHasWrinkles: 1; //offset = 584, size = 4
		SkeletalMeshComponent* EditorBody; //offset = 588, size = 4
		SkeletalMeshComponent* EditorHead; //offset = 592, size = 4
		SkeletalMeshComponent* EditorHair; //offset = 596, size = 4
	};

	class BioVehicleBase: public SVehicle
	{
		DECLARE_PACKAGE_CLASS( BioVehicleBase, SVehicle, SFXGame )

	public:

		GFxMovieInfo* m_oAreaMap; //offset = 1440, size = 4
		m_sVehicleName m_sVehicleName; //offset = 1444, size = 4
		GFxMovieInfo* m_oCurrentAreaMap; //offset = 1448, size = 4
		BioVehicleBehaviorBase* m_oBehavior; //offset = 1452, size = 4
		Bool m_bShowVehicleDebugHUD: 1; //offset = 1456, size = 4
		Bool m_bAwakeOnLevelStart: 1; //offset = 1456, size = 4
		Bool m_bDebugVehicleEnterExitSequence: 1; //offset = 1456, size = 4
		AudioComponent* m_OperationalSounds; //offset = 1460, size = 4
		String m_sAudioTiresVariableName; //offset = 1464, size = 12
		String m_sAudioTiresVariableValueAir; //offset = 1476, size = 12
		String m_sAudioTiresVariableValueWater; //offset = 1488, size = 12
		String m_sAudioTiresVariableValuePavement; //offset = 1500, size = 12
		LightEnvironmentComponent* m_pLightEnvComponent; //offset = 1512, size = 4
		AudioComponent* m_pLowShieldSound; //offset = 1516, size = 4

		void OnTeleport( SeqAct_Teleport* Action, BioPlayerController* oPlayerController );
		Class* GetSaveObjectClass();
		void SetInputs( Float InForward, Float InStrafe, Float InUp );
		Bool ProxyTryToDrive( Pawn* P );
		void DrawHUD( HUD* H, Float fX, Float fY, Float fInc, Float fCarKMPerHour );
		void BioProxyDetachDriver( Pawn* P );
		void DetachDriver( Pawn* P );
		void BioProxyAttachDriver( Pawn* P );
		void AttachDriver( Pawn* P );
		Bool SetExitingSquadLocation( Vector vExitCenterLocation, Float fPlacementOffset, Vector vPlacementOffset, Rotator rPartyFormationAngle, Rotator rVehicleYawAligned, Int J, Pawn* oPawn );
		Bool PlaceExitingDriver( Pawn* ExitingDriver, Int I, Vector tryPlace, Vector Extent, Vector ZOffset, Float fExitRadius, Float fPartyDistanceApart );
		Bool DriverEnter( Pawn* P, Bool bRetval );
		Bool DriverLeave( Bool bForceLeave, Bool bTryNormalExit, Bool bTryForceExit, Pawn* oTempDriver, Rotator ExitRotation, Controller* C, PlayerController* PC );
		void SetPartyCollisionState( Bool bCollideState, Pawn* oPawn, Int J );
		void KillAllMomentum();
		Bool IsExitLocationValid( Vector vExitLocation );
		void InitializeForPlay();
		Bool PerformForceExitCleanup();
		Bool BioCanExitVehicle();
		Bool BioCanEnterVehicle();
		BioVISSimple* GetVisualImpactSet();
	};

	struct TrackParticleSystem
	{
		PhysicalMaterial* oPhysMat; //offset = 0, size = 4
		ParticleSystem* oParticleSystem; //offset = 4, size = 4
	};

	class BioVehicleTrackSet: public Object
	{
		DECLARE_PACKAGE_CLASS( BioVehicleTrackSet, Object, SFXGame )

	public:

		ParticleSystem* m_DefaultParticleSystem; //offset = 60, size = 4
		Array<TrackParticleSystem> m_ParticleSystems; //offset = 64, size = 12

		ParticleSystem* FindParticleSystem( PhysicalMaterial* a_Material );
	};

	class BioVehicleWheeled: public BioVehicleBase
	{
		DECLARE_PACKAGE_CLASS( BioVehicleWheeled, BioVehicleBase, SFXGame )

	public:
	};

	class SFXVehicleHover: public SVehicle
	{
		DECLARE_PACKAGE_CLASS( SFXVehicleHover, SVehicle, SFXGame )

	public:

		Bool bWeaponFiring: 1; //offset = 1440, size = 4
		SFXLoadoutData* Loadout; //offset = 1444, size = 4
		Class* FactionClass; //offset = 1448, size = 4
		Vector JumpForce; //offset = 1452, size = 12
		Vector BoostForce; //offset = 1464, size = 12
		Float CurrentThrustJuice; //offset = 1476, size = 4
		Float MaxThrustJuice; //offset = 1480, size = 4
		Float ThrustRegenerationFactor; //offset = 1484, size = 4
		WwiseAudioComponent* AudioComponent; //offset = 1488, size = 4
		WwiseEventPairObject* VehicleMotorEventPair; //offset = 1492, size = 4
		WwiseEventPairObject* VehicleVerticalBoostEventPair; //offset = 1496, size = 4
		WwiseEventPairObject* VehicleForwardBoostEventPair; //offset = 1500, size = 4
		WwiseEvent* VehicleVerticalBoostEndEvent; //offset = 1504, size = 4
		WwiseEvent* VehicleForwardBoostEndEvent; //offset = 1508, size = 4
		WwiseEvent* VehicleBottomOutEvent; //offset = 1512, size = 4
		WwiseEvent* VehicleMiningSuccessEvent; //offset = 1516, size = 4
		WwiseEvent* VehicleMiningFailureEvent; //offset = 1520, size = 4
		WwiseEvent* VehicleStartupEvent; //offset = 1524, size = 4
		WwiseEvent* VehicleShutdownEvent; //offset = 1528, size = 4
		WwiseEvent* LeftSuspensionEvent; //offset = 1532, size = 4
		WwiseEvent* RightSuspensionEvent; //offset = 1536, size = 4
		WwiseEvent* HitSomething; //offset = 1540, size = 4
		WwiseEventPairObject* VehicleMiningEventPair; //offset = 1544, size = 4
		WwiseEventPairObject* VehicleTurretMovementStartEventPair; //offset = 1548, size = 4
		Float LastLeftSuspension; //offset = 1552, size = 4
		Float LastRightSuspension; //offset = 1556, size = 4
		BioVisualEffect* m_oDamageVisualEffect; //offset = 1560, size = 4
		BioVFXTemplate* m_oDeathVFXTemplate; //offset = 1564, size = 4
		BioVFXTemplate* m_oDamageVFXTemplate; //offset = 1568, size = 4
		ForceFeedbackWaveform* ThrustFeedback; //offset = 1572, size = 4
		Float PreviousCameraPitch; //offset = 1576, size = 4
		Float OnGroundJumpMultiplier; //offset = 1580, size = 4
		Float ForwardThrustBurnRate; //offset = 1584, size = 4
		Float VerticalThrustBurnRate; //offset = 1588, size = 4
		Float ThrustRegenerationDelay; //offset = 1592, size = 4
		Float BurnOutPercentage; //offset = 1596, size = 4
		Float ForcedRegenAmount; //offset = 1600, size = 4
		Float TimeLeftToStartRegen; //offset = 1604, size = 4
		Vector OffGroundForce; //offset = 1608, size = 12
		Float SelfRepairDelay; //offset = 1620, size = 4
		Float SelfRepairRate; //offset = 1624, size = 4
		Float LastHitTime; //offset = 1628, size = 4
		Float HitDamage; //offset = 1632, size = 4
		Float MaxPitchAngle; //offset = 1636, size = 4
		SFXMiningNode* CurrentMiningNode; //offset = 1640, size = 4
		Float TotalMiningTime; //offset = 1644, size = 4
		Float TimeToNextMiningImpulse; //offset = 1648, size = 4
		Bool bMiningFailed: 1; //offset = 1652, size = 4
		Bool m_bIsPaused: 1; //offset = 1652, size = 4
		ForceFeedbackWaveform* MiningFeedbackWaveForm; //offset = 1656, size = 4
		Float TimeToNextMiningFlash; //offset = 1660, size = 4
		Float TimeToFlashMiningIndicator; //offset = 1664, size = 4
		Float MiningIndicatorColor; //offset = 1668, size = 4
		Float MiningFlashDelay; //offset = 1672, size = 4
		Float MiningFlashDuration; //offset = 1676, size = 4
		ParticleSystem* m_oMiningVFXTemplate; //offset = 1680, size = 4
		ParticleSystemComponent* MiningPSC; //offset = 1684, size = 4
		ParticleSystem* m_oAfterburnerVisual; //offset = 1688, size = 4
		ParticleSystemComponent* LeftAfterburnerPSC; //offset = 1692, size = 4
		ParticleSystemComponent* RightAfterburnerPSC; //offset = 1696, size = 4
		LightEnvironmentComponent* LightEnvironment; //offset = 1700, size = 4
		Float RadarRange; //offset = 1704, size = 4
		Float RadarFOV; //offset = 1708, size = 4
		Vector m_vPauseVelocity; //offset = 1712, size = 12

		void RigidBodyCollision( PrimitiveComponent* HitComponent, PrimitiveComponent* OtherComponent, CollisionImpactData RigidCollisionData, Int ContactIndex, Float ContactMag );
		Bool NotifyBump( Actor* Other, Vector HitNormal, BioPawn* BPawn );
		void RanInto( Actor* Other );
		Byte GetFaction( Pawn* Other, BioPawn* BioPawn );
		Bool IsFriendly( Pawn* Other );
		Bool IsHostile( Pawn* Other );
		Rotator GetViewRotation(, Rotator ViewRotation, Rotator ControlRotation, Rotator MaxDelta );
		void Tick( Float DeltaTime, BioPlayerController* BPC, Vector ForceVector, SkelControlLookAt* oSkelControl, Vector CamLoc, Rotator CamRot, SFXModule_Damage* DmgModule, Float fHealthPercent, MaterialInstanceConstant* DamageMaterial, SFXMiningNode* Node, Rotator RandomRotation, Vector RandomImpulse, Int idx, SFXSeqEvt_VehicleMiningSuccess* SuccessEvent, SFXSeqEvt_VehicleMiningFailure* FailureEvent, Float fBottomOutPercentage );
		void TakeDamage( Float Damage, Controller* EventInstigator, Vector HitLocation, Vector Momentum, Class* DamageType, TraceHitInfo HitInfo, Actor* DamageCauser, SFXModule_Damage* DmgModule );
		Bool IsPendingFire( Byte InFiringMode );
		Bool Died( Controller* Killer, Class* DamageType, Vector HitLocation );
		void AddDefaultInventory( SFXLoadoutData* ChkLoadout, SFXShield_Base* Shields, Class* WeaponClass, ShieldLoadout ShieldLoadout );
	};

	class SFXVehicleSimHover: public SVehicleSimBase
	{
		DECLARE_PACKAGE_CLASS( SFXVehicleSimHover, SVehicleSimBase, SFXGame )

	public:

		Float MaxThrustForce; //offset = 144, size = 4
		Float MaxReverseForce; //offset = 148, size = 4
		Float LongDamping; //offset = 152, size = 4
		Float MaxStrafeForce; //offset = 156, size = 4
		Float LatDamping; //offset = 160, size = 4
		Float DirectionChangeForce; //offset = 164, size = 4
		Float MaxRiseForce; //offset = 168, size = 4
		Float UpDamping; //offset = 172, size = 4
		Float TurnTorqueFactor; //offset = 176, size = 4
		Float TurnTorqueMax; //offset = 180, size = 4
		Float TurnDamping; //offset = 184, size = 4
		Float MaxYawRate; //offset = 188, size = 4
		Float PitchTorqueFactor; //offset = 192, size = 4
		Float PitchTorqueMax; //offset = 196, size = 4
		Float PitchDamping; //offset = 200, size = 4
		Float RollTorqueTurnFactor; //offset = 204, size = 4
		Float RollTorqueStrafeFactor; //offset = 208, size = 4
		Float RollTorqueMax; //offset = 212, size = 4
		Float RollDamping; //offset = 216, size = 4
		Float StopThreshold; //offset = 220, size = 4
		Float MaxRandForce; //offset = 224, size = 4
		Float RandForceInterval; //offset = 228, size = 4
		Bool bAllowZThrust: 1; //offset = 232, size = 4
		Bool bFullThrustOnDirectionChange: 1; //offset = 232, size = 4
		Bool bShouldCutThrustMaxOnImpact: 1; //offset = 232, size = 4
		Bool bRecentlyHit: 1; //offset = 232, size = 4
		Bool bStrafeAffectsTurnDamping: 1; //offset = 232, size = 4
		Bool bHeadingInitialized: 1; //offset = 232, size = 4
		Bool bStabilizeStops: 1; //offset = 232, size = 4
		Bool bDisableWheelsWhenOff: 1; //offset = 232, size = 4
		Bool bRepulsorCollisionEnabled: 1; //offset = 232, size = 4
		Bool bCanClimbSlopes: 1; //offset = 232, size = 4
		Bool bUnPoweredDriving: 1; //offset = 232, size = 4
		Float StrafeTurnDamping; //offset = 236, size = 4
		Float TargetHeading; //offset = 240, size = 4
		Float TargetPitch; //offset = 244, size = 4
		Float PitchViewCorrelation; //offset = 248, size = 4
		Vector RandForce; //offset = 252, size = 12
		Vector RandTorque; //offset = 264, size = 12
		Float AccumulatedTime; //offset = 276, size = 4
		Float StabilizationForceMultiplier; //offset = 280, size = 4
		Float CurrentStabilizationMultiplier; //offset = 284, size = 4
		Vector OldVelocity; //offset = 288, size = 12
		Float StoppedBrakeTorque; //offset = 300, size = 4
		Float HardLimitAirSpeedScale; //offset = 304, size = 4
	};

	class BioSeqAct_AbilityEnable: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AbilityEnable, SequenceAction, SFXGame )

	public:

		Array<Pawn*> m_aoPawns; //offset = 240, size = 12
		Bool m_bEnable: 1; //offset = 252, size = 4
		Name m_nmSubType; //offset = 256, size = 8

		void Activated( Byte eType, Int I, BioEpicPawnBehavior* oBehave );
	};

	class BioSequenceLatentAction: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( BioSequenceLatentAction, SeqAct_Latent, SFXGame )

	public:

		Bool bHasTargets: 1; //offset = 256, size = 4

		Bool UpdateOp( Float DeltaTime );
	};

	enum EBioActionStationCombatPose
	{
		BIO_AS_COMBATPOSE_UNSET,
	};

	enum EBioActionStationExitPose
	{
		BIO_AS_EXITPOSE_UNSET,
	};

	enum EBioActionStationEntrancePose
	{
		BIO_AS_ENTRANCEPOSE_UNSET,
	};

	enum EBioActionStationExitCondition
	{
		BIO_AS_NONE,
		BIO_AS_EXIT,
		BIO_AS_COMBAT_EXIT,
		BIO_AS_INTERRUPT,
	};

	struct ActionStationOffsetData
	{
		Name nmAnimSet; //offset = 0, size = 8
		Vector vOffset; //offset = 8, size = 12
		Rotator rRotation; //offset = 20, size = 12
	};

	struct BioActionStationGestureData
	{
		Name nmPoseSet; //offset = 0, size = 8
		Name nmPoseAnim; //offset = 8, size = 8
		Name nmTransitionSet; //offset = 16, size = 8
		Name nmTransitionAnim; //offset = 24, size = 8
		Name nmEnumName; //offset = 32, size = 8
	};

	class BioSeqAct_ActionStation: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ActionStation, BioSequenceLatentAction, SFXGame )

	public:

		BioPawn* m_oPawn; //offset = 260, size = 4
		BioArtPlaceable* m_oArtPlaceable; //offset = 264, size = 4
		BioPathPoint* m_oPathNode; //offset = 268, size = 4
		Bool m_bSnapToPose: 1; //offset = 272, size = 4
		Bool m_bDontMovePathnode: 1; //offset = 272, size = 4
		Bool m_bPlayTwitchesInOrder: 1; //offset = 272, size = 4
		Bool m_bPawnInConversation: 1; //offset = 272, size = 4
		Bool m_bActionStationComplete: 1; //offset = 272, size = 4
		Bool m_bResourcesReferenced: 1; //offset = 272, size = 4
		Vector m_vPathNodeOffset; //offset = 276, size = 12
		RawDistributionFloat m_TimeToSpend; //offset = 288, size = 28
		Int m_nNumOutputTwitches; //offset = 316, size = 4
		Byte m_PawnEntranceTransition; //offset = 320, size = 1
		Byte m_PawnExitTransition; //offset = 321, size = 1
		Byte m_PawnCombatExitTransition; //offset = 322, size = 1
		Byte m_nExitCondition; //offset = 323, size = 1
		Float m_fEntranceBlendTime; //offset = 324, size = 4
		Float m_fExitBlendTime; //offset = 328, size = 4
		Float m_fDelayBeforeTwitch; //offset = 332, size = 4
		Float m_fTimeSpent; //offset = 336, size = 4
		Float m_fTimeToSpend; //offset = 340, size = 4
		BioActionStationGestureData m_EntranceTransition; //offset = 344, size = 40
		BioActionStationGestureData m_ExitTransition; //offset = 384, size = 40
		BioActionStationGestureData m_CombatExitTransition; //offset = 424, size = 40
		BioGestureRulesData* m_RulesData; //offset = 464, size = 4
		Int m_nTwitchStartIndex; //offset = 468, size = 4
		Bool m_bInEntranceTransition: 1; //offset = 472, size = 4
		Bool m_bStartedSuccessfully: 1; //offset = 472, size = 4
		Bool m_bFireFailedPin: 1; //offset = 472, size = 4
		Bool m_bTwitchesAborted: 1; //offset = 472, size = 4
	};

	class BioSeqAct_ActivateGalaxyMap: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ActivateGalaxyMap, SequenceAction, SFXGame )

	public:

		String m_sGalaxyMapResource; //offset = 240, size = 12
		String m_sGalaxyMapResourceConsole; //offset = 252, size = 12
		GFxMovieInfo* m_oGalaxyMapReferenced; //offset = 264, size = 4
		SFXGalaxy* m_pGalaxyMap; //offset = 268, size = 4
		WwiseBaseSoundObject* ErrorSound; //offset = 272, size = 4
		WwiseBaseSoundObject* BuyFuelSound; //offset = 276, size = 4
		WwiseBaseSoundObject* BuyFuelSoundStop; //offset = 280, size = 4
		WwiseBaseSoundObject* BuyFuelSound_Full; //offset = 284, size = 4
		String BuyFuelSound_PctFullRTPCName; //offset = 288, size = 12
		WwiseBaseSoundObject* BuyProbeSound; //offset = 300, size = 4
		WwiseBaseSoundObject* ShipTravelSound_Start; //offset = 304, size = 4
		WwiseBaseSoundObject* ShipTravelSound_Stop; //offset = 308, size = 4
		String ShipTravelSound_SpeedRTPCName; //offset = 312, size = 12
		String ShipTravelSound_ThrustRTPCName; //offset = 324, size = 12
		String ShipTravelSound_FuelQtyRTPCName; //offset = 336, size = 12
		String ShipTravelSound_SystemClusterRTPCName; //offset = 348, size = 12
		WwiseBaseSoundObject* ShipOutOfFuel_Start; //offset = 360, size = 4
		WwiseBaseSoundObject* ShipOutOfFuel_Stop; //offset = 364, size = 4
		Array<WwiseBaseSoundObject*> m_pShipHalfFuelVO; //offset = 368, size = 12
		Array<WwiseBaseSoundObject*> m_pShipNoFuelClusterVO; //offset = 380, size = 12
		Array<WwiseBaseSoundObject*> m_pShipNoFuelClusterReturnVO; //offset = 392, size = 12
		Array<WwiseBaseSoundObject*> m_pShipNoFuelSystemVO; //offset = 404, size = 12
	};

	class BioSeqAct_AddChoiceGUIElement: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AddChoiceGUIElement, SequenceAction, SFXGame )

	public:

		m_srChoiceName m_srChoiceName; //offset = 240, size = 4
		m_srChoiceTitle m_srChoiceTitle; //offset = 244, size = 4
		Texture2D* m_oChoiceImage; //offset = 248, size = 4
		m_srChoiceImageTitle m_srChoiceImageTitle; //offset = 252, size = 4
		m_srChoiceDescription m_srChoiceDescription; //offset = 256, size = 4
		Int m_nOptionalPaneItemValue; //offset = 260, size = 4
		Int m_nChoiceColor; //offset = 264, size = 4
		Int m_nChoiceID; //offset = 268, size = 4
		Bool OverrideDefaultResource: 1; //offset = 272, size = 4
		Bool m_bDefaultSelection: 1; //offset = 272, size = 4
		Bool m_bDisabled: 1; //offset = 272, size = 4
		Bool m_bNested: 1; //offset = 272, size = 4
		Byte m_eResource; //offset = 276, size = 1
		m_srActionText m_srActionText; //offset = 280, size = 4
		Name m_nmResource; //offset = 284, size = 8
	};

	class BioSeqAct_ApplyMetaVFX: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ApplyMetaVFX, SequenceAction, SFXGame )

	public:

		BioMetaVFX* Effect; //offset = 240, size = 4
		Float fLifeTime; //offset = 244, size = 4
		Array<Actor*> Target; //offset = 248, size = 12

		void Activated( Int I );
	};

	class BioSeqAct_AssignFindByTag: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AssignFindByTag, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_AttachEnvironmentEffect: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AttachEnvironmentEffect, SequenceAction, SFXGame )

	public:

		Actor* m_oAttachTo; //offset = 240, size = 4
		Name m_nmSocketOrBone; //offset = 244, size = 8
		Vector m_vOffset; //offset = 252, size = 12
		Float m_fBlendTime; //offset = 264, size = 4
		BioVFXTemplate* m_oEffect; //offset = 268, size = 4
		Bool m_bAttachToCamera: 1; //offset = 272, size = 4
		Float m_fInitialIntensity; //offset = 276, size = 4
	};

	class BioSeqAct_AutoAdjustCover: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AutoAdjustCover, SequenceAction, SFXGame )

	public:

		Float Radius; //offset = 240, size = 4
	};

	class BioSeqAct_AwardTreasure: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AwardTreasure, SequenceAction, SFXGame )

	public:

		Int nState; //offset = 240, size = 4
		Bool bDiscount: 1; //offset = 244, size = 4
		Texture2D* oImageResource; //offset = 248, size = 4

		String GetTreasureImageResourcePath(, String sImageResource, Int nTreasureId );
		void Activated( BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, Bool bAwardedLoot );
	};

	class BioSeqAct_BioActorFactory: public SeqAct_ActorFactory
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_BioActorFactory, SeqAct_ActorFactory, SFXGame )

	public:

		BioActorType* m_oActorType; //offset = 316, size = 4
	};

	enum BlackScreenActionSet
	{
		BlackScreenAction_TurnBlackOn,
		BlackScreenAction_TurnBlackOff,
		BlackScreenAction_FadeToBlack,
	};

	class BioSeqAct_BlackScreen: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_BlackScreen, BioSequenceLatentAction, SFXGame )

	public:

		Byte m_eBlackScreenAction; //offset = 260, size = 1
		Float fTimeExpired; //offset = 264, size = 4
		Float fTimeDelay; //offset = 268, size = 4

		Bool UpdateOp( Float fDeltaT, Bool bFinished, BioWorldInfo* oWorldInfo, BioPlayerController* oController );
		void Activated( BioWorldInfo* oWorldInfo, BioPlayerController* oController );
	};

	class BioSeqAct_BoundsChecker: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_BoundsChecker, SequenceAction, SFXGame )

	public:

		Bool AIsFloat: 1; //offset = 240, size = 4
		Bool BIsFloat: 1; //offset = 240, size = 4
		Bool CIsFloat: 1; //offset = 240, size = 4
		Bool BInclusive: 1; //offset = 240, size = 4
		Bool CInclusive: 1; //offset = 240, size = 4
		Int IntA; //offset = 244, size = 4
		Int IntB; //offset = 248, size = 4
		Int IntC; //offset = 252, size = 4
		Float FloatA; //offset = 256, size = 4
		Float FloatB; //offset = 260, size = 4
		Float FloatC; //offset = 264, size = 4
	};

	class BioSeqAct_ChangeAPState: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ChangeAPState, BioSequenceLatentAction, SFXGame )

	public:

		BioArtPlaceable* oPlaceable; //offset = 260, size = 4
		Name nmNewState; //offset = 264, size = 8
		Name nmNamedTransiton; //offset = 272, size = 8
		Bool bChangeImmediately: 1; //offset = 280, size = 4
		Bool bFail: 1; //offset = 280, size = 4
	};

	class BioSeqAct_ChangeStrategy: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ChangeStrategy, SequenceAction, SFXGame )

	public:

		BioBaseSquad* m_oSquad; //offset = 240, size = 4
		Byte Strategy; //offset = 244, size = 1
		Name m_nmNewStrategy; //offset = 248, size = 8
		Bool m_bHasSquad: 1; //offset = 256, size = 4
	};

	class BioSeqAct_ChangeUseCase: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ChangeUseCase, SequenceAction, SFXGame )

	public:

		BioArtPlaceable* oArtPlaceable; //offset = 240, size = 4
		Int nUseCase; //offset = 244, size = 4
		Name nmNewState0; //offset = 248, size = 8
		Name nmNewState1; //offset = 256, size = 8
		Int nSkillLevel; //offset = 264, size = 4
		Bool bPlayerOnly: 1; //offset = 268, size = 4
	};

	class BioSeqAct_CloneWeaponAppearance: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_CloneWeaponAppearance, BioSequenceLatentAction, SFXGame )

	public:

		Bool m_bBothInputPinsAreConnected: 1; //offset = 260, size = 4
		SkeletalMeshComponent* m_pOriginalPropMesh; //offset = 264, size = 4
		BioPawn* m_pPawn; //offset = 268, size = 4
		SkeletalMeshActor* m_pProp; //offset = 272, size = 4
		Name m_nmAttachedSocket; //offset = 276, size = 8
		Bool m_bStartedSuccessfully: 1; //offset = 284, size = 4
	};

	class BioSeqAct_CopyPlayerHeadToTarget: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_CopyPlayerHeadToTarget, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_Delay: public SeqAct_Delay
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_Delay, SeqAct_Delay, SFXGame )

	public:
	};

	class BioSeqAct_DUISetElementText: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetElementText, SequenceAction, SFXGame )

	public:

		Byte Element; //offset = 240, size = 1
		String sText; //offset = 244, size = 12
	};

	class BioSeqAct_DUITimer: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUITimer, SeqAct_Latent, SFXGame )

	public:

		Bool bModalTimer: 1; //offset = 256, size = 4
		Bool bVisible: 1; //offset = 256, size = 4
		Float fStartTime; //offset = 260, size = 4
		Float fEndTime; //offset = 264, size = 4
		Float fIntervalTime; //offset = 268, size = 4
	};

	class BioSeqAct_EnableCombat: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_EnableCombat, SequenceAction, SFXGame )

	public:

		Bool m_bEnable: 1; //offset = 240, size = 4

		void Activated( BioPlayerController* oController, BioEpicPawnBehavior* oBehavior, BioPlayerSquad* oSquad );
	};

	class BioSeqAct_EndCurrentConvNode: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_EndCurrentConvNode, SequenceAction, SFXGame )

	public:
	};

	enum EBioFOVOSpeakers
	{
		FOVOSpeakers_Unset,
	};

	enum EBioFOVOLines
	{
		FOVOLines_Unset,
	};

	class BioSeqAct_FaceOnlyVO: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_FaceOnlyVO, BioSequenceLatentAction, SFXGame )

	public:

		BioConversation* m_pConversation; //offset = 260, size = 4
		Byte m_eSpeakerList; //offset = 264, size = 1
		Byte m_eConvLine; //offset = 265, size = 1
		Name m_nmSpeakerTag; //offset = 268, size = 8
		m_srLineStrRef m_srLineStrRef; //offset = 276, size = 4
		Bool m_bForceHideSubtitles: 1; //offset = 280, size = 4
		Bool m_bIgnoreHenchmanSquadCheck: 1; //offset = 280, size = 4
		Bool m_bPlaySoundOnly: 1; //offset = 280, size = 4
		Bool m_bDisableDelayUntilPreload: 1; //offset = 280, size = 4
		Float m_fPadLineLength; //offset = 284, size = 4
		m_srActorNameOverride m_srActorNameOverride; //offset = 288, size = 4
		Int m_nPickedSpeakerIndex; //offset = 292, size = 4
		Array<m_aStrRefs> m_aStrRefs; //offset = 296, size = 12
		Actor* m_pActor; //offset = 308, size = 4
		Bool m_bErrorInActivation: 1; //offset = 312, size = 4
		Bool m_bKilledVO: 1; //offset = 312, size = 4
		Bool m_bPreLoadRequested: 1; //offset = 312, size = 4
		Bool m_bPlayRequested: 1; //offset = 312, size = 4
		Bool m_bAllowInConversation: 1; //offset = 312, size = 4
		String m_sSubtitle; //offset = 316, size = 12
		WwiseBaseSoundObject* m_pAudioObject; //offset = 328, size = 4
		Float m_fLineLength; //offset = 332, size = 4
		String m_sFaceFXAnim; //offset = 336, size = 12
		FaceFXAnimSet* m_pFaceFXSet; //offset = 348, size = 4
		Map_Mirror m_mapUsedEnums; //offset = 352, size = 20
		Float m_fPreLoadTimer; //offset = 372, size = 4
	};

	class BioSeqAct_FakeFireWeaponAt: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_FakeFireWeaponAt, SequenceAction, SFXGame )

	public:

		Actor* oShooter; //offset = 240, size = 4
		Actor* oTarget; //offset = 244, size = 4
		Float fDuration; //offset = 248, size = 4
		Bool bDisableVFX: 1; //offset = 252, size = 4
		Bool bDisableDamage: 1; //offset = 252, size = 4
		Bool bDelayedLoad: 1; //offset = 252, size = 4
		Float fRemainingTime; //offset = 256, size = 4
	};

	class BioSeqAct_FakeUsePowerOn: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_FakeUsePowerOn, SequenceAction, SFXGame )

	public:

		Actor* oCaster; //offset = 240, size = 4
		Actor* oTarget; //offset = 244, size = 4
		Name nmPower; //offset = 248, size = 8
		Bool bDisableAnimation: 1; //offset = 256, size = 4
		Bool bDisableVFX: 1; //offset = 256, size = 4
		Bool bDisableDamageAndEffects: 1; //offset = 256, size = 4
	};

	enum EFireWeaponAtOutputPins
	{
		OL_Success,
		OL_Failed,
	};

	class BioSeqAct_FireWeaponAt: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_FireWeaponAt, BioSequenceLatentAction, SFXGame )

	public:

		BioPawn* oPawn; //offset = 260, size = 4
		Actor* oTarget; //offset = 264, size = 4
		Float fReqStab; //offset = 268, size = 4
		Float fAbortStab; //offset = 272, size = 4
		Float fReqRadius; //offset = 276, size = 4
		Float fTimeOut; //offset = 280, size = 4
		Bool bIgnorePerception: 1; //offset = 284, size = 4
		Bool m_bDone: 1; //offset = 284, size = 4
		Int m_nReason; //offset = 288, size = 4
		Byte m_eFireMode; //offset = 292, size = 1
		Int nCompletionReason; //offset = 296, size = 4
	};

	class BioSeqAct_ForceActorMipsResident: public SeqAct_ForceMaterialMipsResident
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ForceActorMipsResident, SeqAct_ForceMaterialMipsResident, SFXGame )

	public:

		Bool bBlockOnWait: 1; //offset = 288, size = 4
	};

	class BioSeqAct_ForceLightEnvUpdate: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ForceLightEnvUpdate, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_GenerateAllActionsComplete: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GenerateAllActionsComplete, SequenceAction, SFXGame )

	public:

		BioPawn* oWho; //offset = 240, size = 4
	};

	class BioSeqAct_GetFromObjectList: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetFromObjectList, SequenceAction, SFXGame )

	public:

		Int nListIndex; //offset = 240, size = 4
	};

	class BioSeqAct_GetNearestObject: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetNearestObject, SequenceAction, SFXGame )

	public:

		Bool bGetFurthest: 1; //offset = 240, size = 4
	};

	class BioSeqAct_GetPawnsInRadius: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetPawnsInRadius, SequenceAction, SFXGame )

	public:

		Actor* oPawn; //offset = 240, size = 4
		Vector vLocation; //offset = 244, size = 12
		Float fRadius; //offset = 256, size = 4
		Int nNumElements; //offset = 260, size = 4
	};

	enum EBioPropertyType
	{
		BPT_INVALID,
		BPT_OBJECT_PROPERTY,
		BPT_BEHAVIOR_PROPERTY,
		BPT_BEHAVIOR_FUNCTION,
	};

	struct BioPropertyMap
	{
		Name sDisplayName; //offset = 0, size = 8
		Name sFuncPropName; //offset = 8, size = 8
	};

	struct BioPropertyInfo
	{
		Name PropertyName; //offset = 0, size = 8
		Name ActualPropertyName; //offset = 8, size = 8
		Bool bDisplayProperty: 1; //offset = 16, size = 4
		Bool bOldDisplayProperty: 1; //offset = 16, size = 4
		Byte ePropertyType; //offset = 20, size = 1
	};

	class BioSeqAct_InteractProperty: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_InteractProperty, SequenceAction, SFXGame )

	public:

		Array<BioPropertyMap> aObjectProperties; //offset = 240, size = 12
		Array<BioPropertyMap> aObjectFunctions; //offset = 252, size = 12
		Array<BioPropertyMap> aBehaviorProperties; //offset = 264, size = 12
		Array<BioPropertyMap> aBehaviorFunctions; //offset = 276, size = 12
		Array<BioPropertyMap> aDamageFunctions; //offset = 288, size = 12
		Array<BioPropertyMap> aSelectionProperties; //offset = 300, size = 12
		Class* cObjectType; //offset = 312, size = 4
		Class* cBehaviorType; //offset = 316, size = 4
		Class* cDamageType; //offset = 320, size = 4
		Class* cSelectionType; //offset = 324, size = 4
		Array<BioPropertyInfo> Properties; //offset = 328, size = 12
	};

	class BioSeqAct_GetProperty: public BioSeqAct_InteractProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetProperty, BioSeqAct_InteractProperty, SFXGame )

	public:
	};

	class BioSeqAct_GetPropertyArtPlaceable: public BioSeqAct_GetProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetPropertyArtPlaceable, BioSeqAct_GetProperty, SFXGame )

	public:
	};

	class BioSeqAct_GetPropertyPawn: public BioSeqAct_GetProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetPropertyPawn, BioSeqAct_GetProperty, SFXGame )

	public:
	};

	class BioSeqAct_GetPropertyVehicle: public BioSeqAct_GetProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetPropertyVehicle, BioSeqAct_GetProperty, SFXGame )

	public:
	};

	class BioSeqAct_GetUseCase: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetUseCase, SequenceAction, SFXGame )

	public:

		BioArtPlaceable* oArtPlaceable; //offset = 240, size = 4
		Int eUseCase; //offset = 244, size = 4
		Name nmCurrentState; //offset = 248, size = 8
		Name nmNewState0; //offset = 256, size = 8
		Name nmNewState1; //offset = 264, size = 8
		Int nSkillLevel; //offset = 272, size = 4
		Bool bPlayerOnly: 1; //offset = 276, size = 4
	};

	class BioSeqAct_HighlightGalaxyMapObject: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_HighlightGalaxyMapObject, SequenceAction, SFXGame )

	public:

		Int m_nHighlightWorld; //offset = 240, size = 4
	};

	class BioSeqAct_InitFSMode: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_InitFSMode, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_InitLoadingMovie: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_InitLoadingMovie, SequenceAction, SFXGame )

	public:

		String sMovieName; //offset = 240, size = 12
	};

	class BioSeqAct_InitSFLoadingMovie: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_InitSFLoadingMovie, SequenceAction, SFXGame )

	public:

		GFxMovieInfo* LoadingMovie; //offset = 240, size = 4
		WwiseEvent* Play; //offset = 244, size = 4
		WwiseEvent* Stop; //offset = 248, size = 4
		Bool OverrideScreenTip: 1; //offset = 252, size = 4
		BioSFScreenTip* ScreenTip; //offset = 256, size = 4
	};

	class BioSeqAct_InsertPostProcess: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_InsertPostProcess, SequenceAction, SFXGame )

	public:

		PostProcessChain* PostProcess; //offset = 240, size = 4

		void Activated();
		void AddPostProcessEffect();
	};

	class BioSeqAct_IsAbilityEnabled: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_IsAbilityEnabled, SequenceAction, SFXGame )

	public:

		Pawn* m_oPawn; //offset = 240, size = 4
		Name m_nmSubType; //offset = 244, size = 8

		void Activated( Byte eType, BioEpicPawnBehavior* oBehave );
	};

	class BioSeqAct_LeaveActionStation: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_LeaveActionStation, SequenceAction, SFXGame )

	public:

		BioPawn* m_oPawn; //offset = 240, size = 4
		Byte m_ExitMethod; //offset = 244, size = 1
	};

	class BioSeqAct_ModifyProperty: public BioSeqAct_InteractProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ModifyProperty, BioSeqAct_InteractProperty, SFXGame )

	public:
	};

	class BioSeqAct_ModifyPropertyArtPlaceable: public BioSeqAct_ModifyProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ModifyPropertyArtPlaceable, BioSeqAct_ModifyProperty, SFXGame )

	public:
	};

	class BioSeqAct_ModifyPropertyBaseSquad: public BioSeqAct_ModifyProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ModifyPropertyBaseSquad, BioSeqAct_ModifyProperty, SFXGame )

	public:
	};

	class BioSeqAct_ModifyPropertyNavigation: public BioSeqAct_ModifyProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ModifyPropertyNavigation, BioSeqAct_ModifyProperty, SFXGame )

	public:
	};

	class BioSeqAct_ModifyPropertyPawn: public BioSeqAct_ModifyProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ModifyPropertyPawn, BioSeqAct_ModifyProperty, SFXGame )

	public:
	};

	class BioSeqAct_ModifyPropertyVehicle: public BioSeqAct_ModifyProperty
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ModifyPropertyVehicle, BioSeqAct_ModifyProperty, SFXGame )

	public:
	};

	class BioSequenceLatentStateAction: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSequenceLatentStateAction, BioSequenceLatentAction, SFXGame )

	public:
	};

	enum EMoveToObjectOutputPins
	{
		MTO_Success,
		MTO_Failed,
	};

	class BioSeqAct_MoveToObject: public BioSequenceLatentStateAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_MoveToObject, BioSequenceLatentStateAction, SFXGame )

	public:

		Pawn* oPawn; //offset = 260, size = 4
		Actor* oTarget; //offset = 264, size = 4
		Float fMoveTolerance; //offset = 268, size = 4
		Bool bWalking: 1; //offset = 272, size = 4
		Bool bRequiresPrecisionMovement: 1; //offset = 272, size = 4
		Bool bSetOrientationToTarget: 1; //offset = 272, size = 4
		Bool bDesiredOrientationSet: 1; //offset = 272, size = 4
		Bool m_bDone: 1; //offset = 272, size = 4
		Int nCompletionReason; //offset = 276, size = 4
		Int m_nReason; //offset = 280, size = 4
	};

	class BioSeqAct_Movie: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_Movie, SequenceAction, SFXGame )

	public:

		TextureMovie* m_oTextureMovie; //offset = 240, size = 4
		Bool m_bIsFinished: 1; //offset = 244, size = 4

		void Activated();
	};

	class BioSeqAct_MovieBink: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_MovieBink, BioSequenceLatentAction, SFXGame )

	public:

		String m_sMovieName; //offset = 260, size = 12
		WwiseEvent* m_wwiseEvent; //offset = 272, size = 4
		Bool m_bFiredBinkStartEvent: 1; //offset = 276, size = 4
		Bool m_bKeepTryingToPlay: 1; //offset = 276, size = 4

		void Deactivated( BioPlayerController* Controller, BioWorldInfo* BWI );
		void Activated( BioPlayerController* Controller );
	};

	class BioSeqAct_NonCombatArea: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_NonCombatArea, SequenceAction, SFXGame )

	public:

		Bool m_bEnable: 1; //offset = 240, size = 4

		void Activated( BioPlayerController* oController, BioEpicPawnBehavior* oBehavior, BioPlayerSquad* oSquad, SFXPawn_Player* oPlayer );
	};

	class BioSeqAct_OverrideStagePlacement: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_OverrideStagePlacement, SequenceAction, SFXGame )

	public:

		Actor* m_aNode1; //offset = 240, size = 4
		Actor* m_aNode2; //offset = 244, size = 4
		Actor* m_aNode3; //offset = 248, size = 4
		Actor* m_aNode4; //offset = 252, size = 4
		Actor* m_aPuppet1; //offset = 256, size = 4
		Actor* m_aPuppet1; //offset = 260, size = 4
		Actor* m_aPuppet2; //offset = 264, size = 4
		Actor* m_aPuppet2; //offset = 268, size = 4
		Actor* m_aStage; //offset = 272, size = 4

		void Activated( BioStage* oStage );
		void SetNode( BioStage* oStage, Actor* aInput, Name nmNodeName, Pawn* oPawn, PlayerController* oPlayer );
	};

	class BioSeqAct_PauseGalaxyMap: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PauseGalaxyMap, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_PlayLoadingMovie: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PlayLoadingMovie, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_PMBase: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PMBase, SequenceAction, SFXGame )

	public:

		Byte Region; //offset = 240, size = 1
		Byte Plot; //offset = 241, size = 1
		String m_sObjectType; //offset = 244, size = 12
		Int m_nIndex; //offset = 256, size = 4
		String m_sVarName; //offset = 260, size = 12
		Int m_nPrevRegionIndex; //offset = 272, size = 4
		Int m_nPrevPlotIndex; //offset = 276, size = 4
	};

	class BioSeqAct_PMCheckConditional: public BioSeqAct_PMBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PMCheckConditional, BioSeqAct_PMBase, SFXGame )

	public:

		Byte Conditional; //offset = 280, size = 1
		Int Param; //offset = 284, size = 4
		Bool OutValue: 1; //offset = 288, size = 4
	};

	class BioSeqAct_PMCheckState: public BioSeqAct_PMBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PMCheckState, BioSeqAct_PMBase, SFXGame )

	public:

		Byte State; //offset = 280, size = 1
		Bool OutValue: 1; //offset = 284, size = 4
	};

	class BioSeqAct_PMExecuteConsequence: public BioSeqAct_PMBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PMExecuteConsequence, BioSeqAct_PMBase, SFXGame )

	public:

		Byte Consequence; //offset = 280, size = 1
		Int Param; //offset = 284, size = 4
	};

	class BioSeqAct_PMExecuteTransition: public BioSeqAct_PMBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PMExecuteTransition, BioSeqAct_PMBase, SFXGame )

	public:

		Byte Transition; //offset = 280, size = 1
		Int Param; //offset = 284, size = 4
	};

	class BioSeqAct_PositionFSActors: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PositionFSActors, SequenceAction, SFXGame )

	public:

		Bool m_bRestoreActors: 1; //offset = 240, size = 4
	};

	class BioSeqAct_PreloadCinematicAudio: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PreloadCinematicAudio, SequenceAction, SFXGame )

	public:

		Bool UpdateOp( Float fDelta );
		void Activated();
	};

	class BioSeqAct_QALog: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_QALog, SequenceAction, SFXGame )

	public:

		String m_sFileName; //offset = 240, size = 12
		Bool m_bOverwrite: 1; //offset = 252, size = 4
		Bool bIncludeObjComment: 1; //offset = 252, size = 4
	};

	class BioSeqAct_RandomWalk: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_RandomWalk, BioSequenceLatentAction, SFXGame )

	public:

		Int m_nMaxWalkDistance; //offset = 260, size = 4
		Float m_fDelayAfterWalk; //offset = 264, size = 4

		void Activated();
	};

	class BioSeqAct_RemovePostProcess: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_RemovePostProcess, SequenceAction, SFXGame )

	public:

		PostProcessChain* PostProcess; //offset = 240, size = 4

		void Activated();
		void RemovePostProcessEffect();
	};

	enum EScalarMathOps
	{
		SMO_Add,
		SMO_Subtract,
		SMO_Multiply,
		SMO_Divide,
	};

	class BioSeqAct_ScalarMathUnit: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ScalarMathUnit, SequenceAction, SFXGame )

	public:

		Bool XIsFloat: 1; //offset = 240, size = 4
		Bool YIsFloat: 1; //offset = 240, size = 4
		Bool ZIsFloat: 1; //offset = 240, size = 4
		Byte Operation; //offset = 244, size = 1
		Int IntX; //offset = 248, size = 4
		Int IntY; //offset = 252, size = 4
		Int IntZ; //offset = 256, size = 4
		Float FloatX; //offset = 260, size = 4
		Float FloatY; //offset = 264, size = 4
		Float FloatZ; //offset = 268, size = 4
	};

	class BioSeqAct_SetAnimNodeBlend: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetAnimNodeBlend, SequenceAction, SFXGame )

	public:

		Float fWeight; //offset = 240, size = 4
		Float fBlendTime; //offset = 244, size = 4
		Int nTargetChild; //offset = 248, size = 4
		Name nmTargetNode; //offset = 252, size = 8
		BioPawn* oPawn; //offset = 260, size = 4
	};

	class BioSeqAct_SetCameraToBone: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetCameraToBone, SequenceAction, SFXGame )

	public:

		Bool m_bRestoreCamera: 1; //offset = 240, size = 4
		Float m_fFOV; //offset = 244, size = 4
	};

	class BioSeqAct_SetEnvironmentEffectIntensity: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetEnvironmentEffectIntensity, SequenceAction, SFXGame )

	public:

		Float m_fIntensity; //offset = 240, size = 4
		Float m_fBlendTime; //offset = 244, size = 4
	};

	enum EBioSetGestureModes
	{
		GestureMode_On,
		GestureMode_Off,
	};

	class BioSeqAct_SetGestureMode: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetGestureMode, SequenceAction, SFXGame )

	public:

		Byte GestureMode; //offset = 240, size = 1
		Bool m_bForActionStation: 1; //offset = 244, size = 4
		Array<String> ActorTags; //offset = 248, size = 12
		Array<BioPawn*> m_aPawns; //offset = 260, size = 12
	};

	class BioSeqAct_SetLightEnvQuality: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetLightEnvQuality, SequenceAction, SFXGame )

	public:

		Byte Quality; //offset = 240, size = 1
	};

	class BioSeqAct_SetNodeLength: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetNodeLength, SequenceAction, SFXGame )

	public:

		Float m_fNodeLength; //offset = 240, size = 4
		Bool m_bChangePCNodeIfBetweenNodes: 1; //offset = 244, size = 4
	};

	class BioSeqAct_SetPhysicsAsset: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetPhysicsAsset, SequenceAction, SFXGame )

	public:

		SkeletalMesh* NewSkeletalMesh; //offset = 240, size = 4
		PhysicsAsset* NewPhysicsAsset; //offset = 244, size = 4
	};

	class BioSeqAct_SetSkelControl: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetSkelControl, SequenceAction, SFXGame )

	public:

		Float fStrengthTarget; //offset = 240, size = 4
		Bool bSetStrengthFromAnimNode: 1; //offset = 244, size = 4
		Float fBlendInTime; //offset = 248, size = 4
		Float fBlendOutTime; //offset = 252, size = 4
		Name nmTargetController; //offset = 256, size = 8
		BioPawn* oPawn; //offset = 264, size = 4
	};

	class BioSeqAct_SetStreamingState: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetStreamingState, SequenceAction, SFXGame )

	public:

		Name StateName; //offset = 240, size = 8
		Bool NewValue: 1; //offset = 248, size = 4

		void Activated( BioWorldInfo* bioWorld, Int I, WorldStreamingState NewState, Bool bFound );
		void RetouchTriggers();
	};

	enum EModes
	{
		MOD_Ready,
		MOD_Explore,
	};

	class BioSeqAct_SetSuperMode: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetSuperMode, SequenceAction, SFXGame )

	public:

		Array<BioPawn*> m_aoPawn; //offset = 240, size = 12
		Byte m_eMode; //offset = 252, size = 1
	};

	class BioSeqAct_SetSuperModeWithWeapon: public BioSeqAct_SetSuperMode
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetSuperModeWithWeapon, BioSeqAct_SetSuperMode, SFXGame )

	public:

		Int nTweedleDee; //offset = 256, size = 4
		Byte eWeapon; //offset = 260, size = 1
		Int nTweedleDum; //offset = 264, size = 4
	};

	enum EBioSeqActSetWeaponLinks
	{
		EBioSeqActSetWeaponLinks_Success,
		EBioSeqActSetWeaponLinks_Failure,
	};

	class BioSeqAct_SetWeapon: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetWeapon, SequenceAction, SFXGame )

	public:

		BioPawn* oPawn; //offset = 240, size = 4
		Class* cWeapon; //offset = 244, size = 4
		Int nWeapon; //offset = 248, size = 4

		void Activated();
	};

	class BioSeqAct_ShouldShowSplashSequence: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShouldShowSplashSequence, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_ShowAchievements: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowAchievements, SequenceAction, SFXGame )

	public:

		String m_sAchivementOverlayResource; //offset = 240, size = 12
		GFxMovieInfo* m_oAchievementOverlayGuiReferenced; //offset = 252, size = 4

		void Activated( MassEffectGuiManager* oGuiMgr, BioWorldInfo* oBWorldInfo );
	};

	class BioSeqAct_ShowChoiceGUI: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowChoiceGUI, BioSequenceLatentAction, SFXGame )

	public:

		Bool m_OverrideExistingChoiceData: 1; //offset = 260, size = 4
		Bool m_ShowOptionalPane: 1; //offset = 260, size = 4
		Bool m_bAutoClose: 1; //offset = 260, size = 4
		m_srTitle m_srTitle; //offset = 264, size = 4
		m_srSubTitle m_srSubTitle; //offset = 268, size = 4
		m_srAButton m_srAButton; //offset = 272, size = 4
		m_srBButton m_srBButton; //offset = 276, size = 4
		m_srOptionalPaneTitleText m_srOptionalPaneTitleText; //offset = 280, size = 4
		m_srOptionalPaneItemValuePrefixText m_srOptionalPaneItemValuePrefixText; //offset = 284, size = 4
		m_srOptionalPaneValuePrefixText m_srOptionalPaneValuePrefixText; //offset = 288, size = 4
		Int m_nOptionalPaneValue; //offset = 292, size = 4
		Bool m_bFinished: 1; //offset = 296, size = 4
		Bool m_bAborted: 1; //offset = 296, size = 4
		Bool m_bAPressed: 1; //offset = 296, size = 4
		Bool m_bWasPaused: 1; //offset = 296, size = 4
		Int m_nSelectionIndex; //offset = 300, size = 4
		BioSFHandler_ChoiceGUI* m_ChoiceGUIHandler; //offset = 304, size = 4
		Int m_nSelectionID; //offset = 308, size = 4
		Int m_nInitialSelectionID; //offset = 312, size = 4
		Name m_nmTag; //offset = 316, size = 8
		Name m_nmResource; //offset = 324, size = 8
		Byte m_eResource; //offset = 332, size = 1

		void ChoiceGUIInputPressed( Bool bAPressed, Int nContext, SFXGameChoiceGUIData* oData, Int nChoiceID );
		Bool UpdateOp( Float fDeltaT, BioPlayerController* PC, BioWorldInfo* WorldInfo );
	};

	class BioSeqAct_ShowCredits: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowCredits, BioSequenceLatentAction, SFXGame )

	public:

		String m_sCreditsResource; //offset = 260, size = 12
		String m_sCreditsResourceConsole; //offset = 272, size = 12
		GFxMovieInfo* m_oCreditsReferenced; //offset = 284, size = 4
		Bool m_bIsFinished: 1; //offset = 288, size = 4

		void Deactivated( BioWorldInfo* oWorldInfo, BioPlayerController* oController, MassEffectGuiManager* oMgr, BioSFPanel* oPanel );
		Bool UpdateOp( Float fDeltaT );
		void onScreenClosed();
		void Activated( BioSFHandler_Credits* oCreditsHandler );
	};

	class BioSeqAct_ShowIntroText: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowIntroText, BioSequenceLatentAction, SFXGame )

	public:

		srText srText; //offset = 260, size = 4
		String m_sIntroTextResource; //offset = 264, size = 12
		String m_sIntroTextResourceConsole; //offset = 276, size = 12
		GFxMovieInfo* m_oIntroTextReferenced; //offset = 288, size = 4

		Bool UpdateOp( Float fDeltaT, BioSFPanel* oIntroPanel, BioWorldInfo* oBWI );
		void Activated( BioSFHandler_IntroText* oHandler );
	};

	class BioSeqAct_ShowMainMenu: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowMainMenu, SequenceAction, SFXGame )

	public:

		Array<String> m_lstMainMenuResources; //offset = 240, size = 12
		Array<String> m_lstMainMenuResourcesConsole; //offset = 252, size = 12
		Array<GFxMovieInfo*> m_lstMainMenuReferenced; //offset = 264, size = 12
		Array<Object*> m_aReferencedObjects; //offset = 276, size = 12

		void Activated( MassEffectGuiManager* oGuiMgr, BioWorldInfo* oBWorldInfo );
	};

	class BioSeqAct_ShowMessageBox: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowMessageBox, SequenceAction, SFXGame )

	public:

		Array<String> sVariableLines; //offset = 240, size = 12
		Array<String> sMessageLines; //offset = 252, size = 12
		Color m_colorForeground; //offset = 264, size = 4
		Color m_colorBackground; //offset = 268, size = 4
		Font* m_font; //offset = 272, size = 4
		Bool m_isActivated: 1; //offset = 276, size = 4
	};

	class BioSeqAct_ShowSniperHudOverlay: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowSniperHudOverlay, SequenceAction, SFXGame )

	public:

		String m_sSniperHudOverlayResource; //offset = 240, size = 12
		String m_sSniperHudOverlayResourceConsole; //offset = 252, size = 12
		GFxMovieInfo* m_oSniperHudOverlayGuiReferenced; //offset = 264, size = 4
		Int nDistance; //offset = 268, size = 4

		void Activated( MassEffectGuiManager* oMgr );
	};

	class BioSeqAct_ShowSpecialization: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowSpecialization, SequenceAction, SFXGame )

	public:

		String m_sSpecializationResource; //offset = 240, size = 12
		String m_sSpecializationResourceConsole; //offset = 252, size = 12
		GFxMovieInfo* m_oSpecializationGuiReferenced; //offset = 264, size = 4

		void Activated();
	};

	class BioSeqAct_ShowSplash: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowSplash, SequenceAction, SFXGame )

	public:

		Bool bShowLegal: 1; //offset = 240, size = 4

		void Activated( BioSFHandler_Splash* oHandler, BioSFPanel* oPanel, BioSFManager* oGuiMgr, BioPlayerController* oPC );
	};

	enum ECustomSkillGameComplete
	{
		CUSTOM_SK_CANCEL,
		CUSTOM_SK_SUCCESS,
		CUSTOM_SK_FAIL,
	};

	class BioSeqAct_SkillGame: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SkillGame, SeqAct_Latent, SFXGame )

	public:

		m_GameMessageSuccess m_GameMessageSuccess; //offset = 256, size = 4
		m_GameMessageFailure m_GameMessageFailure; //offset = 260, size = 4
		m_GameMessageDuringGame m_GameMessageDuringGame; //offset = 264, size = 4
		m_preGameButtonAText m_preGameButtonAText; //offset = 268, size = 4
		m_preGameButtonBText m_preGameButtonBText; //offset = 272, size = 4
		m_preGameButtonXText m_preGameButtonXText; //offset = 276, size = 4
		Bool m_bDoNotUseSalvage: 1; //offset = 280, size = 4
		Bool m_Completed: 1; //offset = 280, size = 4
		Bool m_bSkillGameFailed: 1; //offset = 280, size = 4
		Byte m_CompletionState; //offset = 284, size = 1
		Int m_nNumberOfButtons; //offset = 288, size = 4
		Float m_fButtonTimeout; //offset = 292, size = 4
		Float m_fButtonStartDelay; //offset = 296, size = 4
		Int m_nMinSalvage; //offset = 300, size = 4
		Int m_nMaxSalvage; //offset = 304, size = 4

		void GrantCustomGameXp( BioWorldInfo* oBWorldInfo );
		void OnCancel();
		void OnFailure( Int i_salvage );
		void OnSuccess( Int i_salvage );
	};

	enum ESkillGameComplete
	{
		SK_CANCEL,
		SK_SUCCESS,
		SK_FAIL,
	};

	class BioSeqAct_SkillGame_Base: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SkillGame_Base, SeqAct_Latent, SFXGame )

	public:

		Bool m_bCompleted: 1; //offset = 256, size = 4
		Bool m_bRewardOnTimeFail: 1; //offset = 256, size = 4
		Byte m_CompletionState; //offset = 260, size = 1
		Int m_nStartingResource; //offset = 264, size = 4
		Int m_nPhase2Resource; //offset = 268, size = 4
		Int m_nPhase2Time; //offset = 272, size = 4

		void OnCancel();
		void OnFailure();
		void OnSuccess( Int nRemainingResources );
	};

	class BioSeqAct_SkillGame_Bypass: public BioSeqAct_SkillGame_Base
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SkillGame_Bypass, BioSeqAct_SkillGame_Base, SFXGame )

	public:

		Int m_nNumToSpawn; //offset = 276, size = 4
		Int m_nPCBurnDown; //offset = 280, size = 4
		Int m_nConsoleBurnDown; //offset = 284, size = 4

		void OnFailure();
		void OnSuccess( Int nRemainingResources );
	};

	class BioSeqAct_SkillGame_Decryption: public BioSeqAct_SkillGame_Base
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SkillGame_Decryption, BioSeqAct_SkillGame_Base, SFXGame )

	public:

		Int m_nPercentDanger; //offset = 276, size = 4
		Int m_nPercentGood; //offset = 280, size = 4
		Float m_fSpeed; //offset = 284, size = 4

		void OnFailure();
		void OnSuccess( Int nRemainingResources );
	};

	class BioSeqAct_SquadStartHoldingPosition: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SquadStartHoldingPosition, BioSequenceLatentAction, SFXGame )

	public:

		Array<BioSquadHoldMarker*> m_aoHoldMarkers; //offset = 260, size = 12
		Bool m_bLeaderHoldPosition: 1; //offset = 272, size = 4
		Float m_fTimeOut; //offset = 276, size = 4
		Float m_fCountDown; //offset = 280, size = 4
		BioBaseSquad* m_oSquad; //offset = 284, size = 4
	};

	enum EBioCommonStageCameras
	{
		ChangeCam_Unset,
		cam1_2 = 2,
		cam1_2 = 3,
		cam1_2 = 4,
		cam1_2 = 5,
		cam1_2 = 6,
		cam2_1 = 2,
		cam2_1 = 3,
		cam2_1 = 4,
		cam2_1 = 5,
	};

	class BioSeqAct_StageSwitchCamera: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_StageSwitchCamera, BioSequenceLatentAction, SFXGame )

	public:

		Bool useForNextCamera: 1; //offset = 260, size = 4
		Bool forceCrossingLineOfAction: 1; //offset = 260, size = 4
		Bool saveOldCameraData: 1; //offset = 260, size = 4
		Name explicitCamera; //offset = 264, size = 8
		Int Intimacy; //offset = 272, size = 4
		Byte standardCamera; //offset = 276, size = 1
		Byte Camera; //offset = 277, size = 1
		BioStage* Stage; //offset = 280, size = 4

		Int BioGetCameraNumber();
	};

	class BioSeqAct_StartConversation: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_StartConversation, BioSequenceLatentAction, SFXGame )

	public:

		BioConversation* Conv; //offset = 260, size = 4
		Bool setTargetBusyForDuration: 1; //offset = 264, size = 4
		Bool m_bNoGestures: 1; //offset = 264, size = 4
		Bool m_bLookAtActive: 1; //offset = 264, size = 4
		Bool m_bDisableLookAtRangeCheck: 1; //offset = 264, size = 4
		Bool m_bDisableDelayUntilPreload: 1; //offset = 264, size = 4
		Bool m_bEnterCombatModeOnEnd: 1; //offset = 264, size = 4
		Actor* m_oOwner; //offset = 268, size = 4
		Bool m_bConvReRunDetected: 1; //offset = 272, size = 4
		Bool m_bPreLoading: 1; //offset = 272, size = 4
		Bool m_bPlayRequested: 1; //offset = 272, size = 4
		Float m_fInterruptRange; //offset = 276, size = 4

		Bool ConversationStart( Float fDelta );
	};

	enum EBioStatGroup
	{
		STATGROUP_NONE,
	};

	class BioSeqAct_StatLog: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_StatLog, SequenceAction, SFXGame )

	public:

		Bool m_bShouldDeactivate: 1; //offset = 240, size = 4
		Bool m_bIsInitialized: 1; //offset = 240, size = 4
		Pointer m_pGroup; //offset = 244, size = 4
		Bool bIncludeObjComment: 1; //offset = 248, size = 4
		Byte m_StatGroup; //offset = 252, size = 1
		String m_sFileName; //offset = 256, size = 12
		Int m_iRepeats; //offset = 268, size = 4
	};

	class BioSeqAct_StopLoadingMovie: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_StopLoadingMovie, SequenceAction, SFXGame )

	public:

		Bool ForceSFMovieStop: 1; //offset = 240, size = 4
	};

	class BioSeqAct_TeleportToObject: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_TeleportToObject, SequenceAction, SFXGame )

	public:

		Actor* m_oActor; //offset = 240, size = 4
		Actor* m_oTarget; //offset = 244, size = 4
		Bool m_bUseTargetOrientation: 1; //offset = 248, size = 4
		Bool m_bDisableCollision: 1; //offset = 248, size = 4
		Bool m_bDisablePhysics: 1; //offset = 248, size = 4
		Bool m_bSnapToFloor: 1; //offset = 248, size = 4
	};

	enum ToggleLightEnvType
	{
		TLET_ENABLE,
		TLET_DISABLE,
	};

	class BioSeqAct_ToggleLightEnv: public SeqAct_Toggle
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ToggleLightEnv, SeqAct_Toggle, SFXGame )

	public:
	};

	class BioSeqAct_ToggleSidebarVisibility: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ToggleSidebarVisibility, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_TurnTowards: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_TurnTowards, BioSequenceLatentAction, SFXGame )

	public:

		Actor* oTurnActor; //offset = 260, size = 4
		Actor* oTarget; //offset = 264, size = 4
		Bool bForce: 1; //offset = 268, size = 4
		Rotator rDesiredRot; //offset = 272, size = 12
		Rotator rPreviousPawnRotation; //offset = 284, size = 12
		Bool bStarted: 1; //offset = 296, size = 4
		Bool bFailedToStart: 1; //offset = 296, size = 4
	};

	class BioSeqAct_UseArtPlaceable: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_UseArtPlaceable, SequenceAction, SFXGame )

	public:

		Actor* oWho; //offset = 240, size = 4
		BioArtPlaceable* oArtPlaceable; //offset = 244, size = 4
	};

	const char* COVERANYSLOTFLAG = -1;

	enum EUseCoverOutputPins
	{
		UCO_Success,
		UCO_Failed,
	};

	class BioSeqAct_UseCover: public BioSequenceLatentStateAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_UseCover, BioSequenceLatentStateAction, SFXGame )

	public:

		BioPawn* m_oPawn; //offset = 260, size = 4
		Actor* m_oCoverObject; //offset = 264, size = 4
		Int m_nSlotID; //offset = 268, size = 4
		Array<Actor*> m_oCoverFromObjects; //offset = 272, size = 12
		Bool m_bCheckPerceptionWhileUsingCover: 1; //offset = 284, size = 4
		Bool m_bDone: 1; //offset = 284, size = 4
		Int nCompletionReason; //offset = 288, size = 4
		Int m_nReason; //offset = 292, size = 4
	};

	enum EPowerOnOutputPins
	{
		POL_Success,
		POL_Failed,
	};

	class BioSeqAct_UsePowerOn: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_UsePowerOn, BioSequenceLatentAction, SFXGame )

	public:

		Pawn* oPawn; //offset = 260, size = 4
		Name nmPower; //offset = 264, size = 8
		Byte ePower; //offset = 272, size = 1
		Actor* oTarget; //offset = 276, size = 4
		Float fReqStab; //offset = 280, size = 4
		Float fTimeOut; //offset = 284, size = 4
		Int nCompletionReason; //offset = 288, size = 4
		Bool m_bDone: 1; //offset = 292, size = 4
		Int m_nReason; //offset = 296, size = 4
		Bio2DA* m_oPower2DA; //offset = 300, size = 4
	};

	enum EWalkWaypointSetOutputPins
	{
		WWS_Success,
		WWS_Failed,
	};

	class BioSeqAct_WalkWaypointSet: public BioSequenceLatentStateAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_WalkWaypointSet, BioSequenceLatentStateAction, SFXGame )

	public:

		Route* m_oRoute; //offset = 260, size = 4
		BioWaypointSet* m_oWaypointSet; //offset = 264, size = 4
		Bool m_bStartAtNearestPoint: 1; //offset = 268, size = 4
		Bool m_bWalking: 1; //offset = 268, size = 4
		Bool m_bCountingUp: 1; //offset = 268, size = 4
		Bool m_bSkipPathNodes: 1; //offset = 268, size = 4
		Byte m_eWalkType; //offset = 272, size = 1
		Float m_fMoveTolerance; //offset = 276, size = 4
		Int m_nNextWaypoint; //offset = 280, size = 4
		Bool m_bDone: 1; //offset = 284, size = 4
		Int nCompletionReason; //offset = 288, size = 4

		void Activated( Int nNearestWaypoint, Int I, SFXAI_Ambient* oAI, BioPawn* oBP );
	};

	class BioSeqCond_CheckActorLOS: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( BioSeqCond_CheckActorLOS, SequenceCondition, SFXGame )

	public:
	};

	enum EBioSeqCondCheckChunkStatusCriteria
	{
		EBioSeqCondCheckChunkStatusCriteria_Loaded,
		EBioSeqCondCheckChunkStatusCriteria_LoadedAndVisible,
	};

	class BioSeqCond_CheckChunkStatus: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( BioSeqCond_CheckChunkStatus, SequenceCondition, SFXGame )

	public:

		Byte eCriteria; //offset = 216, size = 1
	};

	const char* Resource_legs = 4;
	const char* Resource_Arms = 2;
	const char* Resource_Head = 1;

	enum eCompletionEventType
	{
		CET_None,
		CET_Combat,
	};

	class BioSeqData: public Object
	{
		DECLARE_PACKAGE_CLASS( BioSeqData, Object, SFXGame )

	public:

		Name StateName; //offset = 60, size = 8
		Int ResourcesNeeded; //offset = 68, size = 4
		Byte m_eCompletionType; //offset = 72, size = 1
		Int m_nCompletionReason; //offset = 76, size = 4

		void OnDisabled( BioAiController* oController, Bool bStarted );
		Bool CanDisable( BioAiController* oController, Byte eEnableType, Name nmSubType );
		String GetDebugDescription();
		Bool CancelOnLOS( BioAiController* oController, Pawn* oLOSTarget );
		void OnCancel( BioAiController* oController, Bool bStarted );
		void OnStart( BioAiController* oController );
		Bool CanCancel( BioAiController* oController );
		Bool OnTick( BioAiController* oController, Float fDeltaT );
		BioEpicPawnBehavior* GetPawnBehavior( Actor* oActor );
	};

	class BioSeqData_ActionBase: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_ActionBase, BioSeqData, SFXGame )

	public:
	};

	class BioSeqData_BehaviorBase: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_BehaviorBase, BioSeqData, SFXGame )

	public:
	};

	struct LOSLinesRecord
	{
		Vector vStart; //offset = 0, size = 12
		Vector vEnd; //offset = 12, size = 12
		Bool bSaw: 1; //offset = 24, size = 4
		Bool bEnemy: 1; //offset = 24, size = 4
	};

	struct LastCompletionRecords
	{
		Name nmAction; //offset = 0, size = 8
		Name nmTech; //offset = 8, size = 8
		Int nReason; //offset = 16, size = 4
	};

	struct AvoidanceLocations
	{
		Vector vLoc; //offset = 0, size = 12
		Vector vVel; //offset = 12, size = 12
		Rotator rRot; //offset = 24, size = 12
		Float fCollision; //offset = 36, size = 4
		Float fExtendedCollision; //offset = 40, size = 4
	};

	struct AvoidanceLocationsArray
	{
		Vector vPawnLoc; //offset = 0, size = 12
		Vector vStearing; //offset = 12, size = 12
		Vector vAdjustPoint; //offset = 24, size = 12
		Float fSearchDist; //offset = 36, size = 4
		Array<AvoidanceLocations> aoObsticals; //offset = 40, size = 12
	};

	class BioSeqData_DEBUGInfo: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_DEBUGInfo, BioSeqData, SFXGame )

	public:

		Bool m_bProfileAIActions: 1; //offset = 80, size = 4
		Bool m_bProfilePerception: 1; //offset = 80, size = 4
		Bool m_bPlayerAutoTarget: 1; //offset = 80, size = 4
		Bool m_bAutoTarget: 1; //offset = 80, size = 4
		AvoidanceLocationsArray CurrentAvoid; //offset = 84, size = 52
		Array<AvoidanceLocationsArray> m_aAvoidanceObsticals; //offset = 136, size = 12
		Array<LastCompletionRecords> m_ActionCompleteMovementList; //offset = 148, size = 12
		Array<LastCompletionRecords> m_ActionCompleteCombatList; //offset = 160, size = 12
		Actor* m_oProfileTarget; //offset = 172, size = 4
		Actor* m_oSightToTarget; //offset = 176, size = 4
		Array<LOSLinesRecord> m_aoLOsLines; //offset = 180, size = 12
		Array<Vector> m_aoBoundLines; //offset = 192, size = 12
		BioActorBehavior* m_oPlayerBehaviour; //offset = 204, size = 4
	};

	class BioSeqData_Delay: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_Delay, BioSeqData, SFXGame )

	public:

		Float m_fTimeToWait; //offset = 80, size = 4
	};

	class BioSeqData_StateBase: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_StateBase, BioSeqData, SFXGame )

	public:
	};

	enum EWI_Mode
	{
		WIM_Entering,
		WIM_Active,
		WIM_Exiting,
		WIM_StartingConv,
	};

	class BioSeqData_DoWorldInteraction: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_DoWorldInteraction, BioSeqData_StateBase, SFXGame )

	public:

		BioWp_ActionStation* WI_Station; //offset = 80, size = 4
		Array<BioActivityTiming*> Activities; //offset = 84, size = 12
		Byte m_Mode; //offset = 96, size = 1
	};

	class BioSeqData_MobTarget: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_MobTarget, BioSeqData_StateBase, SFXGame )

	public:

		Actor* MoveTarget; //offset = 80, size = 4
		Float MoveTolerance; //offset = 84, size = 4
	};

	class BioSeqData_MoveOutOfPawnsWay: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_MoveOutOfPawnsWay, BioSeqData, SFXGame )

	public:
	};

	class BioSeqData_MoveToObject: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_MoveToObject, BioSeqData_StateBase, SFXGame )

	public:

		Actor* MoveTarget; //offset = 80, size = 4
		Float MoveTolerance; //offset = 84, size = 4
		Bool bWalking: 1; //offset = 88, size = 4
		Bool Terminate: 1; //offset = 88, size = 4
		Bool bRequiresPrecisionMovement: 1; //offset = 88, size = 4
	};

	class BioSeqData_MoveToPoint: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_MoveToPoint, BioSeqData_StateBase, SFXGame )

	public:

		Vector MoveTarget; //offset = 80, size = 12
		Float MoveTolerance; //offset = 92, size = 4
		Bool bWalking: 1; //offset = 96, size = 4
		Bool Terminate: 1; //offset = 96, size = 4
		Bool m_bReset: 1; //offset = 96, size = 4
		Bool bRequiresPrecisionMovement: 1; //offset = 96, size = 4

		void ResetMoveTarget( Vector vNewLocation, Float fMoveTolerance );
	};

	class BioSeqData_MoveToPointList: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_MoveToPointList, BioSeqData_StateBase, SFXGame )

	public:

		Array<Vector> m_aMoveTargets; //offset = 80, size = 12
		Float m_fMoveTolerance; //offset = 92, size = 4
		Bool m_bWalking: 1; //offset = 96, size = 4
		Bool Terminate: 1; //offset = 96, size = 4
	};

	class BioSeqData_PartyLookForAndUseCover: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_PartyLookForAndUseCover, BioSeqData, SFXGame )

	public:

		Array<Actor*> aoCoverFrom; //offset = 80, size = 12
		Array<Int> aoCoverFromRank; //offset = 92, size = 12
		Bool m_bHasFoundCover: 1; //offset = 104, size = 4
	};

	class BioSeqData_PlayAnimation: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_PlayAnimation, BioSeqData_StateBase, SFXGame )

	public:

		Array<AnimSet*> AnimationSets; //offset = 80, size = 12
		Array<Name> Animations; //offset = 92, size = 12
		Bool Looping: 1; //offset = 104, size = 4
		Bool Random: 1; //offset = 104, size = 4
		Int CurrentAnimation; //offset = 108, size = 4
	};

	class BioSeqData_QueueDelay: public BioSeqData_ActionBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_QueueDelay, BioSeqData_ActionBase, SFXGame )

	public:

		Float m_fDelay; //offset = 80, size = 4
		Float m_fTimeCount; //offset = 84, size = 4
	};

	class BioSeqData_RandomWalk: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_RandomWalk, BioSeqData_StateBase, SFXGame )

	public:

		Int m_nMaxWalkDistance; //offset = 80, size = 4
		Float m_fDelayAfterWalk; //offset = 84, size = 4
		Vector m_vDestination; //offset = 88, size = 12
	};

	class BioSeqData_SelectWeapon: public BioSeqData_ActionBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_SelectWeapon, BioSeqData_ActionBase, SFXGame )

	public:

		Byte nNewWeapon; //offset = 80, size = 1
		Bool m_bStartedSwitch: 1; //offset = 84, size = 4
	};

	class BioSeqData_StartConversation: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_StartConversation, BioSeqData_StateBase, SFXGame )

	public:

		Actor* m_oOwner; //offset = 80, size = 4
		BioConversation* m_oConversation; //offset = 84, size = 4
	};

	class BioSeqData_TempLookAt_Action: public BioSeqData_BehaviorBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_TempLookAt_Action, BioSeqData_BehaviorBase, SFXGame )

	public:

		Actor* oGoal; //offset = 80, size = 4
		Vector vPoint; //offset = 84, size = 12
		Vector vRelitivePoint; //offset = 96, size = 12
	};

	class BioSeqData_UseArtPlaceable: public BioSeqData_BehaviorBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_UseArtPlaceable, BioSeqData_BehaviorBase, SFXGame )

	public:

		BioArtPlaceable* oAPToUse; //offset = 80, size = 4
		Bool bWalkToAP: 1; //offset = 84, size = 4
	};

	class BioSeqData_UseArtPlaceable_Action: public BioSeqData_ActionBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_UseArtPlaceable_Action, BioSeqData_ActionBase, SFXGame )

	public:

		BioArtPlaceable* oTarget; //offset = 80, size = 4
		Bool m_bStartUse: 1; //offset = 84, size = 4
	};

	class BioSeqData_UsePower: public BioSeqData_ActionBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_UsePower, BioSeqData_ActionBase, SFXGame )

	public:

		Name nmPowerName; //offset = 80, size = 8
		Actor* oTarget; //offset = 88, size = 4
		Float fTimeOut; //offset = 92, size = 4
		Vector vTarget; //offset = 96, size = 12
		Bool m_bStartedCasting: 1; //offset = 108, size = 4
		Bool m_bAcquiredActive: 1; //offset = 108, size = 4
		Bool m_bLOS: 1; //offset = 108, size = 4
		Bool m_bOrderedByPlayer: 1; //offset = 108, size = 4
		Bool m_bDeathPower: 1; //offset = 108, size = 4
		BioPower* m_oPowerCache; //offset = 112, size = 4

		Bool CanCancel( BioAiController* oController );
	};

	class BioSeqData_WalkWaypoints: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_WalkWaypoints, BioSeqData_StateBase, SFXGame )

	public:

		BioWaypointSet* m_oWaypointSet; //offset = 80, size = 4
		Actor* m_oMoveTarget; //offset = 84, size = 4
		Int m_nNextWaypoint; //offset = 88, size = 4
		Bool m_bCountingUp: 1; //offset = 92, size = 4
		Bool m_bResumeWalking: 1; //offset = 92, size = 4
		Bool m_bWalking: 1; //offset = 92, size = 4
		Bool m_bDone: 1; //offset = 92, size = 4
		Bool m_bPaused: 1; //offset = 92, size = 4
		Float m_fMoveTolerance; //offset = 96, size = 4
		Byte m_eWalkType; //offset = 100, size = 1
	};

	class BioSeqEvt_AbilityDisabled: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_AbilityDisabled, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_AbilityEnabled: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_AbilityEnabled, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_AreaMap: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_AreaMap, SequenceEvent, SFXGame )

	public:

		String sEvent; //offset = 280, size = 12
	};

	class BioSeqEvt_BackgroundStreamingDone: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_BackgroundStreamingDone, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_CinematicSkipped: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_CinematicSkipped, SequenceEvent, SFXGame )

	public:

		String sEvent; //offset = 280, size = 12
	};

	enum EConversationScriptType
	{
		NodeEnd,
		NodeStart,
		StartConversationScript,
	};

	class BioSeqEvt_Conversation: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_Conversation, SequenceEvent, SFXGame )

	public:

		Byte eScriptType; //offset = 280, size = 1
		Name sScriptName; //offset = 284, size = 8
		BioConversation* Conv; //offset = 292, size = 4
	};

	class BioSeqEvt_ConvNode: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_ConvNode, SequenceEvent, SFXGame )

	public:

		Int m_nNodeID; //offset = 280, size = 4
		Int m_nConvResRefID; //offset = 284, size = 4
		Bool m_bSetWaitFlags: 1; //offset = 288, size = 4
	};

	class BioSeqEvt_EnterFollowFormation: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_EnterFollowFormation, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_EnterRestFormation: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_EnterRestFormation, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_ForegroundStreamingDone: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_ForegroundStreamingDone, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_GalaxyMap: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_GalaxyMap, SequenceEvent, SFXGame )

	public:

		String sEvent; //offset = 280, size = 12
		Name EventParameter; //offset = 292, size = 8
	};

	class BioSeqEvt_LeaderChanged: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_LeaderChanged, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_MemberAdded: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_MemberAdded, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_MemberRemoved: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_MemberRemoved, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_NoLongerSeePlayer: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_NoLongerSeePlayer, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_OnAttacked: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnAttacked, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_OnCastAt: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnCastAt, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_OnPlayerActivate: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnPlayerActivate, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_SeePlayer: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_SeePlayer, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqVar_ChoiceGUIData: public SeqVar_Object
	{
		DECLARE_PACKAGE_CLASS( BioSeqVar_ChoiceGUIData, SeqVar_Object, SFXGame )

	public:

		SFXGameChoiceGUIData* m_ChoiceData; //offset = 164, size = 4
	};

	class BioSeqVar_ObjectFindByTag: public SeqVar_Object
	{
		DECLARE_PACKAGE_CLASS( BioSeqVar_ObjectFindByTag, SeqVar_Object, SFXGame )

	public:

		String m_sObjectTagToFind; //offset = 164, size = 12
		Bool m_bSearchUniqueTag: 1; //offset = 176, size = 4
	};

	class BioSeqVar_ObjectListFindByTag: public SeqVar_ObjectList
	{
		DECLARE_PACKAGE_CLASS( BioSeqVar_ObjectListFindByTag, SeqVar_ObjectList, SFXGame )

	public:

		String m_sObjectTagToFind; //offset = 176, size = 12
	};

	class BioSeqVar_StoryManagerBool: public SeqVar_Bool
	{
		DECLARE_PACKAGE_CLASS( BioSeqVar_StoryManagerBool, SeqVar_Bool, SFXGame )

	public:

		Byte Region; //offset = 164, size = 1
		Byte Plot; //offset = 165, size = 1
		Byte State; //offset = 166, size = 1
		Int m_nIndex; //offset = 168, size = 4
		String m_sVarName; //offset = 172, size = 12
		Int m_nPrevRegionIndex; //offset = 184, size = 4
		Int m_nPrevPlotIndex; //offset = 188, size = 4
		String m_sRefName; //offset = 192, size = 12
	};

	class BioSeqVar_StoryManagerFloat: public SeqVar_Float
	{
		DECLARE_PACKAGE_CLASS( BioSeqVar_StoryManagerFloat, SeqVar_Float, SFXGame )

	public:

		Byte Region; //offset = 164, size = 1
		Byte Plot; //offset = 165, size = 1
		Byte Float; //offset = 166, size = 1
		Int m_nIndex; //offset = 168, size = 4
		String m_sVarName; //offset = 172, size = 12
		Int m_nPrevRegionIndex; //offset = 184, size = 4
		Int m_nPrevPlotIndex; //offset = 188, size = 4
		String m_sRefName; //offset = 192, size = 12
	};

	class BioSeqVar_StoryManagerInt: public SeqVar_Int
	{
		DECLARE_PACKAGE_CLASS( BioSeqVar_StoryManagerInt, SeqVar_Int, SFXGame )

	public:

		Byte Region; //offset = 164, size = 1
		Byte Plot; //offset = 165, size = 1
		Byte Int; //offset = 166, size = 1
		Int m_nIndex; //offset = 168, size = 4
		String m_sVarName; //offset = 172, size = 12
		Int m_nPrevRegionIndex; //offset = 184, size = 4
		Int m_nPrevPlotIndex; //offset = 188, size = 4
		String m_sRefName; //offset = 192, size = 12
	};

	class BioSeqVar_StoryManagerStateId: public SeqVar_Int
	{
		DECLARE_PACKAGE_CLASS( BioSeqVar_StoryManagerStateId, SeqVar_Int, SFXGame )

	public:

		Byte Region; //offset = 164, size = 1
		Byte Plot; //offset = 165, size = 1
		Byte State; //offset = 166, size = 1
		Int m_nIndex; //offset = 168, size = 4
		String m_sVarName; //offset = 172, size = 12
		Int m_nPrevRegionIndex; //offset = 184, size = 4
		Int m_nPrevPlotIndex; //offset = 188, size = 4
		String m_sRefName; //offset = 192, size = 12
	};

	class SFXSeqAct_AIFactory: public SeqAct_ActorFactory
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_AIFactory, SeqAct_ActorFactory, SFXGame )

	public:

		BioBaseSquad* Squad; //offset = 316, size = 4
		Bool bAutoAcquireEnemy: 1; //offset = 320, size = 4
		Bool bAutoNotify: 1; //offset = 320, size = 4
		Bool bTestSpawnVisibility: 1; //offset = 320, size = 4
		Bool bAbortOnFailSpawn: 1; //offset = 320, size = 4
		Bool bPlayCustomActivationAnim: 1; //offset = 320, size = 4
		Bool bAbortSpawns: 1; //offset = 320, size = 4
		Actor* VisibilitySource; //offset = 324, size = 4
		Name nmTag; //offset = 328, size = 8

		void Deactivated();
		void Activated();
	};

	class SFXSeqAct_AIGoHere: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_AIGoHere, BioSequenceLatentAction, SFXGame )

	public:

		Float m_fTimeOut; //offset = 260, size = 4
		Float m_fInvalidateRange; //offset = 264, size = 4
		Bool m_bInvalidateOnFlank: 1; //offset = 268, size = 4
		Bool m_bInstanceLogging: 1; //offset = 268, size = 4
		BioPawn* m_Pawn; //offset = 272, size = 4
		NavigationPoint* m_TargetNav; //offset = 276, size = 4
		Bool m_bArrivedPinFired: 1; //offset = 280, size = 4
		Bool m_bTargetInvalidated: 1; //offset = 280, size = 4
		NavigationPoint* m_TargetNavAtInvalidation; //offset = 284, size = 4
		Float m_TimeRemaining; //offset = 288, size = 4
		Float m_UpdateTimer; //offset = 292, size = 4

		void ScriptPreActorHandle( Actor* inActor );
		Bool TryInvalidateTargetFlank();
		Bool TryInvalidateTargetRange( Float fRangeToTargetInUU );
		void ResetUpdateTimer();
		void ClearGoHereTarget( SFXAI_Core* oAI );
		void InvalidateGoHereTarget( SFXAI_Core* oAI );
		Bool UpdateOp( Float DeltaTime, SFXAI_Core* oAI );
		void Deactivated( SFXAI_Core* oAI );
		void Activated( SFXAI_Core* oAI );
	};

	class SFXSeqAct_ChangeBehaviour: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ChangeBehaviour, SequenceAction, SFXGame )

	public:

		Actor* oPawn; //offset = 240, size = 4
		Class* ControllerClass; //offset = 244, size = 4
		Byte eBehaviour; //offset = 248, size = 1
		Name nmBehaviour; //offset = 252, size = 8

		void Activated( SFXAI_Core* oController, Bool bSuccess );
	};

	class SFXSeqAct_CharCreateClass: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CharCreateClass, SequenceAction, SFXGame )

	public:
	};

	class SFXSeqAct_CharCreateCrust: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CharCreateCrust, SeqAct_Latent, SFXGame )

	public:

		BioVisualEffect* CrustEffectActor; //offset = 256, size = 4
		BioPawn* PreviousTarget; //offset = 260, size = 4
		BioPawn* CurrentTarget; //offset = 264, size = 4
		BioVFXTemplate* CrustToApply; //offset = 268, size = 4
	};

	class SFXSeqAct_CloseChoiceGui: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CloseChoiceGui, SequenceAction, SFXGame )

	public:

		Name m_nmTag; //offset = 240, size = 8
	};

	class SFXSeqAct_CollectorPossess: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CollectorPossess, SeqAct_Latent, SFXGame )

	public:

		BioPawn* oPossessedPawn; //offset = 256, size = 4

		void PossessPawn( BioPawn* oPawn );
	};

	class SFXSeqAct_CreateNotification: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CreateNotification, SequenceAction, SFXGame )

	public:

		Byte nPriority; //offset = 240, size = 1
		Int Priority; //offset = 244, size = 4
		sTitle sTitle; //offset = 248, size = 4
		sSubtitle sSubtitle; //offset = 252, size = 4
		sBody sBody; //offset = 256, size = 4
		Float fDisplayTime; //offset = 260, size = 4
		Texture* oImage; //offset = 264, size = 4
		Name nRemoteEvent; //offset = 268, size = 8
	};

	class SFXSeqAct_EnableAI: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_EnableAI, SeqAct_Latent, SFXGame )

	public:

		Bool m_bEnable: 1; //offset = 256, size = 4
		Bool m_bFirstPass: 1; //offset = 256, size = 4
	};

	class SFXSeqAct_FireWeaponAt: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_FireWeaponAt, SeqAct_Latent, SFXGame )

	public:

		BioPawn* oPawn; //offset = 256, size = 4
		Actor* oTarget; //offset = 260, size = 4
		Float fTimeOut; //offset = 264, size = 4
		Bool bIgnorePerception: 1; //offset = 268, size = 4
		Bool bCheckLOS: 1; //offset = 268, size = 4
		Bool m_bDone: 1; //offset = 268, size = 4
		Int nCompletionReason; //offset = 272, size = 4
		Float m_fTotalTimeRunning; //offset = 276, size = 4
		Int m_nReason; //offset = 280, size = 4

		void FireWeapon( Actor* pTarget, SFXAI_Core* oAI );
		void CancelFire( SFXAI_Core* oAI );
		void FireWeaponCallback( Int nReason );
	};

	class SFXSeqAct_InitLoadingMovies: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_InitLoadingMovies, SequenceAction, SFXGame )

	public:

		BioLoadingMovie* Movie; //offset = 240, size = 4
		Bool HideScaleform: 1; //offset = 244, size = 4
		Bool RequiresExplicitStop: 1; //offset = 244, size = 4
		Bool PlayToCompletion: 1; //offset = 244, size = 4
		Bool OverrideScreenTip: 1; //offset = 244, size = 4
		BioSFScreenTip* ScreenTip; //offset = 248, size = 4
	};

	class SFXSeqAct_IsPawnInCover: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_IsPawnInCover, SequenceAction, SFXGame )

	public:

		Actor* oTargetActor; //offset = 240, size = 4
	};

	class SFXSeqAct_LegacyDataCallback: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_LegacyDataCallback, BioSequenceLatentAction, SFXGame )

	public:

		OnlineSubsystem* OnlineSubsystem; //offset = 260, size = 4
		XenonInterface XenonInterface; //offset = 264, size = 8
		SFXLegacyData* ImportDataManager; //offset = 272, size = 4
		BioWorldInfo* BWI; //offset = 276, size = 4
		Bool m_bLegacyDataReady: 1; //offset = 280, size = 4
		Bool m_bLoginUIActive: 1; //offset = 280, size = 4
		Bool m_bLoginUIOpenedOnce: 1; //offset = 280, size = 4
		Int m_nAutoDeviceID; //offset = 284, size = 4
		Float m_fTimeOut; //offset = 288, size = 4

		void ApplyCanonPlotStates( BioGlobalVariableTable* VarTable );
		void PingBlazeReconnect( SFXGame* oGame, SFXOnlineSubsystem* oOnline, SFXOnlineComponentBlazeLogin* oLogin );
		Bool TryImport();
		void ME2ImportPlotState( LocalPlayer* LocPlayer, SFXEngine* Engine, BioGlobalVariableTable* VarTable, BioSaveGame* SaveGame );
		Bool UpdateOp( Float DeltaTime, LocalPlayer* LocPlayer, Int ControllerId, Bool bIsXbox, SFXEngine* Engine );
		void DetermineParams();
		void Activated();
	};

	class SFXSeqAct_MoveToNode: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_MoveToNode, SeqAct_Latent, SFXGame )

	public:

		BioPawn* oPawn; //offset = 256, size = 4
		Actor* oMoveTarget; //offset = 260, size = 4
		Float fMoveOffset; //offset = 264, size = 4
		Float fTimeOut; //offset = 268, size = 4
		Bool bWalking: 1; //offset = 272, size = 4
		Bool m_bDone: 1; //offset = 272, size = 4
		Bool m_bWasWalkingBefore: 1; //offset = 272, size = 4
		Float m_fTotalTimeRunning; //offset = 276, size = 4
		Int nCompletionReason; //offset = 280, size = 4
		Int m_nReason; //offset = 284, size = 4

		void MoveTo( SFXAI_Core* oAI );
		void CancelMove( SFXAI_Core* oAI );
		void MoveToCallback( Int nReason );
	};

	class SFXSeqAct_SetAreaMap: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetAreaMap, SequenceAction, SFXGame )

	public:

		Byte MapLayout; //offset = 240, size = 1
		Texture2D* MapAsset; //offset = 244, size = 4
		Vector RefPoint1_Image_Px; //offset = 248, size = 12
		Vector RefPoint2_Image_Px; //offset = 260, size = 12
		Actor* Ref1; //offset = 272, size = 4
		Actor* Ref2; //offset = 276, size = 4
		String m_sAreaMapGuiResource; //offset = 280, size = 12
		GFxMovieInfo* m_oAreaMapReference; //offset = 292, size = 4

		void Activated( BioWorldInfo* oWorldInfo, MassEffectGuiManager* Manager, SFXAreaMapData* MapData );
	};

	class SFXSeqAct_SetStringref: public SeqAct_SetSequenceVariable
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetStringref, SeqAct_SetSequenceVariable, SFXGame )

	public:

		Target Target; //offset = 240, size = 4
		Value Value; //offset = 244, size = 4
	};

	class SFXSeqAct_ShowPersonalizationUI: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ShowPersonalizationUI, BioSequenceLatentAction, SFXGame )

	public:

		String m_sCreationResource; //offset = 260, size = 12
		String m_sCreationResourceConsole; //offset = 272, size = 12
		GFxMovieInfo* m_oCreationReferenced; //offset = 284, size = 4
		Bool m_bComplete: 1; //offset = 288, size = 4

		void Deactivated( MassEffectGuiManager* oGuiManager );
		void OnComplete();
		Bool UpdateOp( Float fDeltaT );
		void Activated( MassEffectGuiManager* oGuiManager, BioSFPanel* oPersonalizationPanel );
	};

	class SFXSeqAct_StartConversation: public BioSeqAct_StartConversation
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_StartConversation, BioSeqAct_StartConversation, SFXGame )

	public:

		Int m_nbNodes; //offset = 280, size = 4
		Int m_nbPreviousNodes; //offset = 284, size = 4
		BioStage* m_pStage; //offset = 288, size = 4

		Bool ConversationStart( Float fDelta );
	};

	class SFXSeqAct_UsePowerOn: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_UsePowerOn, SeqAct_Latent, SFXGame )

	public:

		Pawn* oPawn; //offset = 256, size = 4
		Name nmPower; //offset = 260, size = 8
		Byte ePower; //offset = 268, size = 1
		Actor* oTarget; //offset = 272, size = 4
		Float fTimeOut; //offset = 276, size = 4
		Int nCompletionReason; //offset = 280, size = 4
		Float m_fTotalTimeRunning; //offset = 284, size = 4
		Bool m_bDone: 1; //offset = 288, size = 4
		Bio2DA* m_oPower2DA; //offset = 292, size = 4
		Int m_nReason; //offset = 296, size = 4

		void UsePower( Actor* pTarget, SFXAI_Core* oAI );
		void CancelPower( SFXAI_Core* oAI );
		void UsePowerCallback( Int nReason );
	};

	class SFXSeqAct_WaitForStreamingComplete: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_WaitForStreamingComplete, SeqAct_Latent, SFXGame )

	public:

		Bool bWaitForVisibleOnly: 1; //offset = 256, size = 4
	};

	class SFXSeqCond_Platform: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( SFXSeqCond_Platform, SequenceCondition, SFXGame )

	public:
	};

	class SFXSeqEvt_StorageDeviceReconnected: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_StorageDeviceReconnected, SequenceEvent, SFXGame )

	public:
	};

	class SFXSeqEvt_Touch: public SeqEvent_Touch
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_Touch, SeqEvent_Touch, SFXGame )

	public:
	};

	class SFXSeqVar_SavedBool: public SeqVar_Bool
	{
		DECLARE_PACKAGE_CLASS( SFXSeqVar_SavedBool, SeqVar_Bool, SFXGame )

	public:

		Guid MyGuid; //offset = 164, size = 16
	};

	class BioCurveDrivenParameter: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCurveDrivenParameter, Object, SFXGame )

	public:

		String sParameterName; //offset = 60, size = 12
		Name nmParameterName; //offset = 72, size = 8
		Bool bScaleToLifetime: 1; //offset = 80, size = 4
		Bool bLoop: 1; //offset = 80, size = 4
		RawDistributionFloat m_curve; //offset = 84, size = 28

		Float GetValue( Float fTime, Float fScale );
	};

	class BioDecalComponent: public DecalComponent
	{
		DECLARE_PACKAGE_CLASS( BioDecalComponent, DecalComponent, SFXGame )

	public:

		RawDistributionFloat FadeInTime; //offset = 688, size = 28
		RawDistributionFloat FadeOutTime; //offset = 716, size = 28
		RawDistributionFloat DecalLifetime; //offset = 744, size = 28
		RawDistributionFloat DecalSize; //offset = 772, size = 28
		RawDistributionFloat DecalRoll; //offset = 800, size = 28
		RawDistributionFloat DecalYaw; //offset = 828, size = 28
		RawDistributionFloat DecalPitch; //offset = 856, size = 28
		Bool bScaleByDistance: 1; //offset = 884, size = 4
		Bool bProjectOnShields: 1; //offset = 884, size = 4
		Array<BioCurveDrivenParameter*> aDecalMaterialParameters; //offset = 888, size = 12
		RawDistributionFloat SizeScale; //offset = 900, size = 28
		MaterialInstanceConstant* m_MaterialInstance; //offset = 928, size = 4
		SpotLightComponent* m_SkeletalDecal; //offset = 932, size = 4
		SkeletalMeshComponent* m_SkeletalReceiver; //offset = 936, size = 4
	};

	struct EffectMaterialPriority
	{
		Byte eType; //offset = 0, size = 1
		Int nPriority; //offset = 4, size = 4
	};

	class BioEffectsMaterialsPriorityMap: public Object
	{
		DECLARE_PACKAGE_CLASS( BioEffectsMaterialsPriorityMap, Object, SFXGame )

	public:

		Array<EffectMaterialPriority> PriorityMap; //offset = 60, size = 12
		BioEffectsMaterialsPriorityMap* m_GlobalEffectsPriorityMap; //offset = 72, size = 4
	};

	enum EBioVFXCost
	{
		EBioVFXCost = 2,
		EBioVFXCost = 3,
		EBioVFXCost = 4,
	};

	class BioVFXTemplate: public Object
	{
		DECLARE_PACKAGE_CLASS( BioVFXTemplate, Object, SFXGame )

	public:

		Prefab* oPrefab; //offset = 60, size = 4
		Float fLifeTime; //offset = 64, size = 4
		Bool bCreateNewSoundEverySpawn: 1; //offset = 68, size = 4
		Bool m_bFadeOnPause: 1; //offset = 68, size = 4
		Bool bEnableCollision: 1; //offset = 68, size = 4
		Bool bUseActorScale: 1; //offset = 68, size = 4
		Bool bIsCrustEffect: 1; //offset = 68, size = 4
		Bool bIsImpactCrustEffect: 1; //offset = 68, size = 4
		Bool bAllowParticlesToFinish: 1; //offset = 68, size = 4
		Bool bAttachToNearestBone: 1; //offset = 68, size = 4
		Bool bIsInitialized: 1; //offset = 68, size = 4
		Bool m_bInstancePoolEnabled: 1; //offset = 68, size = 4
		Bool m_bIgnorePooling: 1; //offset = 68, size = 4
		Bool m_bDisableBoolDecay: 1; //offset = 68, size = 4
		Bool bPlayerOnly: 1; //offset = 68, size = 4
		Bool bSharedBetweenInstances: 1; //offset = 68, size = 4
		Bool m_bUseIntensityCurve: 1; //offset = 68, size = 4
		WwiseBaseSoundObject* oSoundCue; //offset = 72, size = 4
		Array<WwiseBaseSoundObject*> m_aSoundsForIntensityLevels; //offset = 76, size = 12
		Float m_fFadeInTime; //offset = 88, size = 4
		Float m_fFadeOutTime; //offset = 92, size = 4
		Float fImpactRadius; //offset = 96, size = 4
		Float fParticleTimeout; //offset = 100, size = 4
		Float fEffectMaterialTimeout; //offset = 104, size = 4
		Byte ePriority; //offset = 108, size = 1
		Byte eCost; //offset = 109, size = 1
		Byte eCharacterMaterial; //offset = 110, size = 1
		Float m_afCostTable[5]; //offset = 112, size = 4
		Float m_fInstancePoolRechargePeriod; //offset = 132, size = 4
		Int m_nInstancePoolMax; //offset = 136, size = 4
		Int m_nDefaultPoolMax; //offset = 140, size = 4
		Int m_nDefaultPoolMin; //offset = 144, size = 4
		PostProcessChain* oFrameBufferEffect; //offset = 148, size = 4
		Array<BioCurveDrivenParameter*> aPostProcessParameters; //offset = 152, size = 12
		Int nMaxInstancesAllowed; //offset = 164, size = 4
		Int nNumActiveInstances; //offset = 168, size = 4
		BioVFXTemplate* oSharedFramebufferEffect; //offset = 172, size = 4
		BioVisualEffect* oInstancedSharedFrameBufferEffect; //offset = 176, size = 4
		Float m_fMaxRange; //offset = 180, size = 4
		RawDistributionFloat m_rawIntensityVsDistanceDistribution; //offset = 184, size = 28
		Name m_nmEffectsMaterial; //offset = 212, size = 8
		Array<BioCurveDrivenParameter*> aInstanceParameters; //offset = 220, size = 12
		Float fPercentageOfDirection; //offset = 232, size = 4
		Array<BioDecalComponent*> Decals; //offset = 236, size = 12
		BioCameraShake* m_cameraShake; //offset = 248, size = 4

		void InitializeTemplate();
	};

	class BioMetaVFX: public Object
	{
		DECLARE_PACKAGE_CLASS( BioMetaVFX, Object, SFXGame )

	public:

		Array<BioVFXTemplate*> m_aCreatureVFXs; //offset = 60, size = 12
		Array<BioVFXTemplate*> m_aPlaceableVFXs; //offset = 72, size = 12

		void ApplyEffect( BioMetaVFX* MetaEffect, Object* Target, Float fLifeTime );
		void ApplyEffectByName( String sEffect, Object* Target, Float fLifeTime );
	};

	struct PowerVFXData
	{
		Bool bUsePowerTime: 1; //offset = 0, size = 4
		BioVFXTemplate* m_EffectTemplate; //offset = 4, size = 4
	};

	class BioPowerVFXAppearance: public Object
	{
		DECLARE_PACKAGE_CLASS( BioPowerVFXAppearance, Object, SFXGame )

	public:

		Name nmProjectileAttachPoint; //offset = 60, size = 8
		PowerVFXData PlayerCrust; //offset = 68, size = 8
		PowerVFXData PlayerMaterial; //offset = 76, size = 8
		PowerVFXData UsingEffect; //offset = 84, size = 8
		PowerVFXData FramebufferEffect; //offset = 92, size = 8
		PowerVFXData TargetCrust; //offset = 100, size = 8
		PowerVFXData TargetMaterial; //offset = 108, size = 8
		BioDeathVFX* m_pDeathVFX; //offset = 116, size = 4
		PowerVFXData ImpactVisualEffect; //offset = 120, size = 8
		PowerVFXData WorldImpactVisualEffect; //offset = 128, size = 8
		PowerVFXData CastingBeam; //offset = 136, size = 8
		BioVFXTemplate* vfxProjectileEffect; //offset = 144, size = 4
		BioVFXTemplate* vfxReleaseEffect; //offset = 148, size = 4
	};

	class BioVFXAppearanceVehicleThruster: public Object
	{
		DECLARE_PACKAGE_CLASS( BioVFXAppearanceVehicleThruster, Object, SFXGame )

	public:

		BioVFXTemplate* vfxThrusterBurner; //offset = 60, size = 4
	};

	enum EBioVFXState
	{
		BVFX_SPAWN,
		BVFX_LIFE,
		BVFX_DEATH,
	};

	struct InterpPropertyInfo
	{
		Object* Outer; //offset = 0, size = 4
		Int Offset; //offset = 4, size = 4
	};

	struct CachedInstanceParameter
	{
		Name ParameterName; //offset = 0, size = 8
		Float fCurrentValue; //offset = 8, size = 4
		Array<InterpPropertyInfo> OffsetInfo; //offset = 12, size = 12
		Bool bInited: 1; //offset = 24, size = 4
	};

	class BioVisualEffect: public PrefabInstance
	{
		DECLARE_PACKAGE_CLASS( BioVisualEffect, PrefabInstance, SFXGame )

	public:

		Bool bDeleteSelf: 1; //offset = 624, size = 4
		Bool bPaused: 1; //offset = 624, size = 4
		Bool bActive: 1; //offset = 624, size = 4
		Bool bLoopLife: 1; //offset = 624, size = 4
		Bool bPauseOnDeath: 1; //offset = 624, size = 4
		Bool bIsComponentOnly: 1; //offset = 624, size = 4
		Bool bHideBaseOnComplete: 1; //offset = 624, size = 4
		Byte eCurrentState; //offset = 628, size = 1
		Float fLifeDuration; //offset = 632, size = 4
		Float m_accruedTime; //offset = 636, size = 4
		Float fTotalDuration; //offset = 640, size = 4
		BioVFXTemplate* pTemplate; //offset = 644, size = 4
		SeqAct_Interp* Matinee; //offset = 648, size = 4
		String sStateNames[3]; //offset = 652, size = 12
		Float fStateDurations[3]; //offset = 688, size = 4
		Float fStateStartTimes[3]; //offset = 700, size = 4
		Float fStateEndTimes[3]; //offset = 712, size = 4
		Float fCurrentTime; //offset = 724, size = 4
		Bool bCancelSpawn: 1; //offset = 728, size = 4
		Int nMaxDecals; //offset = 732, size = 4
		Int nLastDecal; //offset = 736, size = 4
		BioDecalComponent* aDecalList[3]; //offset = 740, size = 4
		BioDecalComponent* pLastDecal; //offset = 752, size = 4
		WwiseBaseSoundObject* oSoundCue; //offset = 756, size = 4
		AudioComponent* oAudioComponent; //offset = 760, size = 4
		WwiseEventPairObject* oCurrentWwisePair; //offset = 764, size = 4
		BioCameraShake* m_cameraShake; //offset = 768, size = 4
		Array<Actor*> m_cameraShakenActors; //offset = 772, size = 12
		Int m_nAttachedToBoneCount; //offset = 784, size = 4
		Object* m_pInstigator; //offset = 788, size = 4
		Array<CachedInstanceParameter> m_CachedInstanceParameters; //offset = 792, size = 12
		MultiMap_Mirror m_mObjectFloatPropertyMap; //offset = 804, size = 20
		MultiMap_Mirror m_mTrackMaterialFloatMap; //offset = 824, size = 20
		MultiMap_Mirror m_mObjectVectorPropertyMap; //offset = 844, size = 20
		MultiMap_Mirror m_mTrackMaterialVectorMap; //offset = 864, size = 20

		void OnComplete();
		Bool SetSound( Int nIndexInSoundArray );
		BioVisualEffect* CreateVFXOnPosition( BioVFXTemplate* a_pTemplate, Vector vPosition, Rotator rOrientation, Float fLifeTime, Bool bUseVFXPool );
		BioVisualEffect* CreateVFXOnMesh( BioVFXTemplate* a_pTemplate, Actor* Target, Name sBoneName, Float fLifeTime, SkeletalMeshComponent* mTargetMesh, Bool bUseVFXPool );
		BioVisualEffect* CreateCrustEffect( BioVFXTemplate* a_pTemplate, Actor* Target, Float fLifeTime, Bool bUseVFXPool );
		void SetLifeTime( Float fLife );
		void SetVectorParameter( Name sParameter, Vector vValue );
		void SetScalarParameter( Name sParameter, Float fValue );
		Float GetStateDuration( Byte eState );
		Float GetEffectDuration();
		void DestroyInstance();
		Bool IsAttached();
		Bool SetBasePrefab( Prefab* pBase );
		Bool SetState( Byte eState, Bool bForceSetState, Bool bPlayAudio, Bool bForceKill );
		Bool SetPaused( Bool bPause, Bool bForceRefresh );
		void PauseOnDeath( Bool bPause );
		void LoopDuration( Bool bLoop );
	};

	class BioVisualEffectPool: public Object
	{
		DECLARE_PACKAGE_CLASS( BioVisualEffectPool, Object, SFXGame )

	public:

		Int m_nMinEffectsInPool; //offset = 60, size = 4
		Int m_nMaxEffectsInPool; //offset = 64, size = 4
		BioVFXTemplate* m_VFXTemplate; //offset = 68, size = 4
		Bool m_bInstancePoolEnabled: 1; //offset = 72, size = 4
		Float m_fInstancePoolRechargePeriod; //offset = 76, size = 4
		Int m_nInstancePoolMax; //offset = 80, size = 4
		Int m_nInstancePoolCurrent; //offset = 84, size = 4
		Float m_fInstancePoolTimeAccumulator; //offset = 88, size = 4
		Float m_fTimeTillDecay; //offset = 92, size = 4
		Float m_fDecayPeriod; //offset = 96, size = 4
		Array<BioVisualEffect*> m_EffectPool; //offset = 100, size = 12

		void PrimePoolEffects( Int a_nNumEffects );
		BioVisualEffect* GetEffect();
		void SetPoolSize( Int a_nMaxSize, Int a_nMinSize );
		void Initialize( BioVFXTemplate* a_oTemplate, Int nMaxNumEffects, Int nMinNumEffects );
	};

	class BioEmissionAreaList: public Object
	{
		DECLARE_PACKAGE_CLASS( BioEmissionAreaList, Object, SFXGame )

	public:
	};

	struct BoneAndWeight
	{
		Name BoneName; //offset = 0, size = 8
		Float BoneWeight; //offset = 8, size = 4
	};

	struct BoneListEmissionArea
	{
		Name AreaTag; //offset = 0, size = 8
		Bool UseNumVertsAsWeights: 1; //offset = 8, size = 4
		Array<BoneAndWeight> Bones; //offset = 12, size = 12
	};

	class BioEmissionAreaListBoneList: public BioEmissionAreaList
	{
		DECLARE_PACKAGE_CLASS( BioEmissionAreaListBoneList, BioEmissionAreaList, SFXGame )

	public:

		Array<BoneListEmissionArea> m_EmissionAreas; //offset = 60, size = 12
	};

	class BioParticleModuleCollisionDecal: public ParticleModuleCollision
	{
		DECLARE_PACKAGE_CLASS( BioParticleModuleCollisionDecal, ParticleModuleCollision, SFXGame )

	public:

		BioDecalComponent* DecalTemplate; //offset = 224, size = 4
		String CollisionEmitter; //offset = 228, size = 12
		Bool bEnableMultiHitDecal: 1; //offset = 240, size = 4
		Array<Name> ColorParams; //offset = 244, size = 12
		ParticleSystem* CollisionEmitterTemplate; //offset = 256, size = 4

		void CreateDecal( ParticleSystemComponent* PSC, PrimitiveComponent* HitComponent, Vector HitLocation, Vector HitNormal, MaterialInstanceTimeVarying* MITV, MaterialInterface* DecalMaterial, Name Param, ParticleSysParam PSParam, LinearColor C );
	};

	class BioParticleModuleEmitterSpeedBase: public ParticleModule
	{
		DECLARE_PACKAGE_CLASS( BioParticleModuleEmitterSpeedBase, ParticleModule, SFXGame )

	public:
	};

	enum EmissionAreaSpecificationType
	{
		EAST_UniformDensityPerVertex,
		EAST_UniformDensityPerBone,
		EAST_WeightedDensityPerBone,
	};

	struct EmissionAreaWeight
	{
		Name AreaTag; //offset = 0, size = 8
		Float Weight; //offset = 8, size = 4
	};

	class BioParticleModuleLocationAttachedMesh: public ParticleModuleLocationBase
	{
		DECLARE_PACKAGE_CLASS( BioParticleModuleLocationAttachedMesh, ParticleModuleLocationBase, SFXGame )

	public:

		BioEmissionAreaList* m_EmissionAreaList; //offset = 76, size = 4
		Array<EmissionAreaWeight> m_EmissionAreaWeights; //offset = 80, size = 12
		Array<Name> m_ValidEmissionSet; //offset = 92, size = 12
		Bool m_bCheckAgainstValidEmissionSet: 1; //offset = 104, size = 4
		Bool bUseAttachedLocalSpace: 1; //offset = 104, size = 4
		Byte m_SpecificationType; //offset = 108, size = 1
	};

	enum EBioParticleCollisionComplete
	{
		EBPCC_DoNothing,
		EBPCC_Kill,
		EBPCC_Freeze,
		EBPCC_FreezeTranslation,
	};

	enum ELocationNearestSurface
	{
		eLocationNearestSurface_Stay,
		eLocationNearestSurface_StayAtRadius,
	};

	class BioParticleModuleLocationPrimitiveNearestSurface: public ParticleModuleLocationPrimitiveBase
	{
		DECLARE_PACKAGE_CLASS( BioParticleModuleLocationPrimitiveNearestSurface, ParticleModuleLocationPrimitiveBase, SFXGame )

	public:

		Bool bInitialLocationOnly: 1; //offset = 136, size = 4
		Bool bMovingLocationOnly: 1; //offset = 136, size = 4
		Bool bDirectionRelativeToEmitter: 1; //offset = 136, size = 4
		Bool bTestActors: 1; //offset = 136, size = 4
		Float fRadius; //offset = 140, size = 4
		Byte eIfNoCollision; //offset = 144, size = 1
		Byte eOnCollision; //offset = 145, size = 1
		Array<Vector> m_aSearchDirections; //offset = 148, size = 12
	};

	enum MultiplyByEmitterSpeedProperty
	{
		MESProperty_SpawnRate,
	};

	class BioParticleModuleMultiplyByEmitterSpeed: public BioParticleModuleEmitterSpeedBase
	{
		DECLARE_PACKAGE_CLASS( BioParticleModuleMultiplyByEmitterSpeed, BioParticleModuleEmitterSpeedBase, SFXGame )

	public:

		Byte MultipliedProperty; //offset = 68, size = 1
		Float MinUsedSpeed; //offset = 72, size = 4
		Float MaxUsedSpeed; //offset = 76, size = 4
		Float MultiplierAtMin; //offset = 80, size = 4
		Float MultiplierAtMax; //offset = 84, size = 4
	};

	class BioParticleModuleSoundBase: public ParticleModule
	{
		DECLARE_PACKAGE_CLASS( BioParticleModuleSoundBase, ParticleModule, SFXGame )

	public:
	};

	enum EInstanceVersion
	{
		ParticleModSound_OriginalVer,
		ParticleModSound_PerParticleVer,
	};

	class BioParticleModuleSound: public BioParticleModuleSoundBase
	{
		DECLARE_PACKAGE_CLASS( BioParticleModuleSound, BioParticleModuleSoundBase, SFXGame )

	public:

		WwiseBaseSoundObject* oWwiseEvent; //offset = 68, size = 4
		Bool bPerEmitter: 1; //offset = 72, size = 4
		Bool bPerParticle: 1; //offset = 72, size = 4
		Bool m_bDuck: 1; //offset = 72, size = 4
		Float m_DuckDistanceThreshold; //offset = 76, size = 4
		WwiseEvent* WwiseDuckEvent; //offset = 80, size = 4
		Int ObjInstanceVersion; //offset = 84, size = 4
	};

	class BioParticleModuleVelocityWorldSpace: public ParticleModuleVelocity
	{
		DECLARE_PACKAGE_CLASS( BioParticleModuleVelocityWorldSpace, ParticleModuleVelocity, SFXGame )

	public:
	};

	class SFXParticleModule_Base: public ParticleModule
	{
		DECLARE_PACKAGE_CLASS( SFXParticleModule_Base, ParticleModule, SFXGame )

	public:
	};

	class SFXParticleModule_CameraEffect: public SFXParticleModule_Base
	{
		DECLARE_PACKAGE_CLASS( SFXParticleModule_CameraEffect, SFXParticleModule_Base, SFXGame )

	public:

		Bool bPlayerImpact: 1; //offset = 68, size = 4
		Bool bUseIntensityCurve: 1; //offset = 68, size = 4
		Bool bPlayProgrammaticShake: 1; //offset = 68, size = 4
		Float MaxRange; //offset = 72, size = 4
		RawDistributionFloat RawIntensityVsDistanceDistribution; //offset = 76, size = 28
		ScreenShakeStruct ProgrammaticShake; //offset = 104, size = 112
		BioCameraShake* AnimatedShake; //offset = 216, size = 4
		PostProcessChain* FramebufferEffect; //offset = 220, size = 4
		Float Duration; //offset = 224, size = 4
	};

	class SFXGameInterpTrack: public BioInterpTrack
	{
		DECLARE_PACKAGE_CLASS( SFXGameInterpTrack, BioInterpTrack, SFXGame )

	public:

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioConvNodeTrackDebug: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioConvNodeTrackDebug, SFXGameInterpTrack, SFXGame )

	public:

		Array<String> m_aDbgStrings; //offset = 108, size = 12

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXGameInterpTrackInst: public BioInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( SFXGameInterpTrackInst, BioInterpTrackInst, SFXGame )

	public:

		SFXConvAuditionHelper* m_pAuditionHelper; //offset = 64, size = 4
	};

	class BioConvNodeTrackDebugInst: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioConvNodeTrackDebugInst, SFXGameInterpTrackInst, SFXGame )

	public:
	};

	struct BioDOFTrackData
	{
		Bool bEnableDOF: 1; //offset = 0, size = 4
		Float fFalloffExponent; //offset = 4, size = 4
		Float fBlurKernelSize; //offset = 8, size = 4
		Float fMaxNearBlurAmount; //offset = 12, size = 4
		Float fMaxFarBlurAmount; //offset = 16, size = 4
		Color cModulateBlurColor; //offset = 20, size = 4
		Float fFocusInnerRadius; //offset = 24, size = 4
		Float fFocusDistance; //offset = 28, size = 4
		Vector vFocusPosition; //offset = 32, size = 12
		Float fInterpolateSeconds; //offset = 44, size = 4
	};

	class BioEvtSysTrackDOF: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackDOF, SFXGameInterpTrack, SFXGame )

	public:

		Array<BioDOFTrackData> m_aDOFData; //offset = 108, size = 12
		Float m_fDOFDefaultBlurKernel; //offset = 120, size = 4
		Float m_fDOFDefaultExponent; //offset = 124, size = 4
		Float m_fDOFDefaultMaxNearBlur; //offset = 128, size = 4
		Float m_fDOFDefaultMaxFarBlur; //offset = 132, size = 4

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackDOFInst: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackDOFInst, SFXGameInterpTrackInst, SFXGame )

	public:

		Float m_fInterpolateElapsed; //offset = 68, size = 4
		Int m_nCurEffect; //offset = 72, size = 4
	};

	enum EBioFuncShotType
	{
		FuncShotType_Unset,
	};

	struct BioFuncShotData
	{
		Byte eShotType; //offset = 0, size = 1
		String sActor1; //offset = 4, size = 12
		String sActor2; //offset = 16, size = 12
		String sStage; //offset = 28, size = 12
		Int nActor1PosNode; //offset = 40, size = 4
		Bool bUseCamera: 1; //offset = 44, size = 4
		Name nmShotName; //offset = 48, size = 8
	};

	class BioEvtSysTrackFuncShot: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackFuncShot, SFXGameInterpTrack, SFXGame )

	public:

		Array<BioFuncShotData> m_aShotData; //offset = 108, size = 12
		Name m_nmOldShotType; //offset = 120, size = 8

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackFuncShotInst: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackFuncShotInst, SFXGameInterpTrackInst, SFXGame )

	public:
	};

	enum EActorTrackFindActorMode
	{
		ActorTrack_FindActorByTag,
		ActorTrack_UseObjectPinForActor,
	};

	class SFXGameActorInterpTrack: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( SFXGameActorInterpTrack, SFXGameInterpTrack, SFXGame )

	public:

		Name m_nmFindActor; //offset = 108, size = 8
		Byte m_eFindActorMode; //offset = 116, size = 1
		Bool m_bActorChanged: 1; //offset = 120, size = 4
		Name m_nmOldFindActor; //offset = 124, size = 8
	};

	class BioEvtSysTrackGestureAudHelper: public Object
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackGestureAudHelper, Object, SFXGame )

	public:

		Bool m_bReloadPreviewAnimsets: 1; //offset = 60, size = 4
		Bool m_bAllowMovingChainKeys: 1; //offset = 60, size = 4
		Bool m_bAllPoseGroupsLoaded: 1; //offset = 60, size = 4
		Material* m_pRightArrow; //offset = 64, size = 4
		Int m_nOldGestureFilter; //offset = 68, size = 4
		Name m_nmValidPoseEnum; //offset = 72, size = 8
		Name m_nmValidGestureEnum; //offset = 80, size = 8
		Name m_nmValidGestureFilter; //offset = 88, size = 8
		Name m_nmGestureGroupsEnum; //offset = 96, size = 8
		Int m_nOldPoseFilter; //offset = 104, size = 4
		Name m_nmValidPoseFilter; //offset = 108, size = 8
		Name m_nmPoseGroupsEnum; //offset = 116, size = 8
		Name m_nmAllPosesFilter; //offset = 124, size = 8
	};

	enum EBioTrackAllPoseGroups
	{
		AllPoseGroups_Unset,
	};

	enum EBioValidPoseGroups
	{
		ValidPoseGroups_Unset,
	};

	enum EBioGestureGroups
	{
		GestGroups_Unset,
	};

	enum EBioGestureValidGestures
	{
		GestValidGest_Unset,
	};

	enum EBioGestureValidPoses
	{
		GestValidPoses_Unset,
	};

	enum EBioGestureOverrideType
	{
		DEFAULT_TRACK,
		FEMALE_PLAYER_TRACK,
	};

	enum EBioGestureAllPoses
	{
		GestPose_Unset,
	};

	struct BioGesturePinScrubData
	{
		Name nmAnimSet; //offset = 0, size = 8
		Name nmAnimSeq; //offset = 8, size = 8
		Float fTime; //offset = 16, size = 4
		Float fWeight; //offset = 20, size = 4
	};

	struct BioGestureScrubData
	{
		Name nmNextPoseSet; //offset = 104, size = 8
		Name nmNextPoseAnim; //offset = 112, size = 8
		Float fCurPoseTime; //offset = 120, size = 4
		Float fNextPoseTime; //offset = 124, size = 4
		Float fTransitionTime; //offset = 128, size = 4
		Float fCurPoseWeight; //offset = 132, size = 4
		Float fTransitionWeight; //offset = 136, size = 4
		Float fNextPoseWeight; //offset = 140, size = 4
		Array<BioGesturePinScrubData> aGestPins; //offset = 144, size = 12
	};

	struct BioGestureData
	{
		Byte ePoseFilter; //offset = 0, size = 1
		Byte ePose; //offset = 1, size = 1
		Byte eGestureFilter; //offset = 2, size = 1
		Byte eGesture; //offset = 3, size = 1
		Name nmPoseSet; //offset = 4, size = 8
		Name nmPoseAnim; //offset = 12, size = 8
		Name nmGestureSet; //offset = 20, size = 8
		Name nmGestureAnim; //offset = 28, size = 8
		Name nmTransitionSet; //offset = 36, size = 8
		Name nmTransitionAnim; //offset = 44, size = 8
		Float fPlayRate; //offset = 52, size = 4
		Float fStartOffset; //offset = 56, size = 4
		Float fEndOffset; //offset = 60, size = 4
		Bool bInvalidData: 1; //offset = 64, size = 4
		Bool bOneShotAnim: 1; //offset = 64, size = 4
		Float fStartBlendDuration; //offset = 68, size = 4
		Float fEndBlendDuration; //offset = 72, size = 4
		Float fWeight; //offset = 76, size = 4
		Bool bChainToPrevious: 1; //offset = 80, size = 4
		Bool bPlayUntilNext: 1; //offset = 80, size = 4
		Array<Int> aChainedGestures; //offset = 84, size = 12
		Bool bUseDynAnimSets: 1; //offset = 96, size = 4
		Bool bSnapToPose: 1; //offset = 96, size = 4
		Float fTransBlendTime; //offset = 100, size = 4
	};

	struct BioGestureRenameData
	{
		Name nmOldAnim; //offset = 0, size = 8
		Name nmNewSet; //offset = 8, size = 8
		Name nmNewAnim; //offset = 16, size = 8
	};

	struct BioGestTrackPriority
	{
		Int nTrackIndex; //offset = 0, size = 4
		Int nPriority; //offset = 4, size = 4
	};

	class BioEvtSysTrackGesture: public SFXGameActorInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackGesture, SFXGameActorInterpTrack, SFXGame )

	public:

		Array<BioGestureData> m_aGestures; //offset = 132, size = 12
		Byte ePoseFilter; //offset = 144, size = 1
		Byte eStartingPose; //offset = 145, size = 1
		Byte eOverrideType; //offset = 146, size = 1
		Name nmStartingPoseSet; //offset = 148, size = 8
		Name nmStartingPoseAnim; //offset = 156, size = 8
		Bool m_bARPUGenerated: 1; //offset = 164, size = 4
		Bool m_bAutoGenFemaleTrack: 1; //offset = 164, size = 4
		Bool m_bUseDynamicAnimsets: 1; //offset = 164, size = 4
		BioEvtSysTrackGestureAudHelper* m_pGestAudHelper; //offset = 168, size = 4
		Float m_fStartPoseOffset; //offset = 172, size = 4

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXGameActorInterpTrackInst: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( SFXGameActorInterpTrackInst, SFXGameInterpTrackInst, SFXGame )

	public:

		Actor* m_pActor; //offset = 68, size = 4
	};

	class BioEvtSysTrackGestureInst: public SFXGameActorInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackGestureInst, SFXGameActorInterpTrackInst, SFXGame )

	public:

		Bool m_bActiveTrack: 1; //offset = 72, size = 4
		Bool m_bBelongsToConversation: 1; //offset = 72, size = 4
		Map_Mirror m_mapCachedAnimsets; //offset = 76, size = 20

		Actor* FindActorByTagForScript( Name nmTagToFind, InterpTrackInst* pTrackInst, Bool bTagIsStageNode );
	};

	struct BioInterruptTrackData
	{
		Bool bShowInterrupt: 1; //offset = 0, size = 4
	};

	class BioEvtSysTrackInterrupt: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackInterrupt, SFXGameInterpTrack, SFXGame )

	public:

		Array<BioInterruptTrackData> m_aInterruptData; //offset = 108, size = 12

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackInterruptInst: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackInterruptInst, SFXGameInterpTrackInst, SFXGame )

	public:

		BioConversation* m_pConv; //offset = 68, size = 4
	};

	class BioEvtSysTrackLighting: public SFXGameActorInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackLighting, SFXGameActorInterpTrack, SFXGame )

	public:

		Array<BioConvLightingData> m_aLightingKeys; //offset = 132, size = 12

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackLightingInst: public SFXGameActorInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackLightingInst, SFXGameActorInterpTrackInst, SFXGame )

	public:

		BioConvLightingData InitialLightingData; //offset = 72, size = 68
		Bool ResetLightingData: 1; //offset = 140, size = 4
	};

	struct BioLookAtTrackData
	{
		Name nmFindActor; //offset = 0, size = 8
		Byte eFindActorMode; //offset = 8, size = 1
		Bool bEnabled: 1; //offset = 12, size = 4
		Float fDuration; //offset = 16, size = 4
	};

	class BioEvtSysTrackLookAt: public SFXGameActorInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackLookAt, SFXGameActorInterpTrack, SFXGame )

	public:

		Array<BioLookAtTrackData> m_aLookAtKeys; //offset = 132, size = 12

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackLookAtInst: public SFXGameActorInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackLookAtInst, SFXGameActorInterpTrackInst, SFXGame )

	public:
	};

	struct BioPropPreviewResource
	{
		Name nmProp; //offset = 0, size = 8
		MeshComponent* pPropCmp; //offset = 8, size = 4
		Bool bEquipped: 1; //offset = 12, size = 4
		Map_Mirror mapActions; //offset = 16, size = 20
	};

	struct BioActionPreviewResource
	{
		Name nmAction; //offset = 0, size = 8
		ParticleSystemComponent* pPartSysCmp; //offset = 8, size = 4
		Bool bEquipped: 1; //offset = 12, size = 4
		AnimSet* pAnimSet; //offset = 16, size = 4
		Name nmAnimation; //offset = 20, size = 8
	};

	struct BioUsedMeshPropData
	{
		MeshComponent* pPropCmp; //offset = 0, size = 4
		Array<ParticleSystemComponent*> aEffects; //offset = 4, size = 12
	};

	struct BioFoundWeaponData
	{
		SFXWeapon* pWeapon; //offset = 0, size = 4
		Bool bSpawned: 1; //offset = 4, size = 4
	};

	class BioEvtSysTrackPropInst: public SFXGameActorInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackPropInst, SFXGameActorInterpTrackInst, SFXGame )

	public:

		Bool m_bBelongsToConversation: 1; //offset = 72, size = 4
		Map_Mirror m_mapFoundWeapons; //offset = 76, size = 20
		Map_Mirror m_mapUsedMeshProps; //offset = 96, size = 20
		Map_Mirror m_mapPreviewResources; //offset = 116, size = 20

		String GetWeaponName( SFXWeapon* pWeapon );
		void RemoveWeaponData( Class* cWeapon );
		void AddWeaponData( Class* cWeapon, SFXWeapon* pWep, Bool bSpawned );
		SFXWeapon* FindWeaponData( Class* cWeapon, Int nSpawned );
	};

	enum EDynPropActionList
	{
		DynPropActionList_Unset,
	};

	enum EDynPropList
	{
		DynPropList_Unset,
	};

	struct BioWeaponPropActionData
	{
		Function* pfnExecute; //offset = 0, size = 4
		Function* pfnGetTiming; //offset = 4, size = 4
	};

	struct BioPropTrackData
	{
		Bool bEquip: 1; //offset = 0, size = 4
		Byte eProp; //offset = 4, size = 1
		Name nmProp; //offset = 8, size = 8
		Byte eAction; //offset = 16, size = 1
		Name nmAction; //offset = 20, size = 8
		Float fActionDuration; //offset = 28, size = 4
		Object* pPropMesh; //offset = 32, size = 4
		ParticleSystem* pActionPartSys; //offset = 36, size = 4
		Class* pWeaponClass; //offset = 40, size = 4
	};

	class BioEvtSysTrackProp: public SFXGameActorInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackProp, SFXGameActorInterpTrack, SFXGame )

	public:

		Array<BioPropTrackData> m_aPropKeys; //offset = 132, size = 12
		Bool m_bPropListLoaded: 1; //offset = 144, size = 4
		Bool m_bInPreviewUpdate: 1; //offset = 144, size = 4
		Map_Mirror m_mapWeaponProps; //offset = 148, size = 20
		Float m_fLastInterpLength; //offset = 168, size = 4

		Float PropWepActionTimingHideAmmoFade( SFXWeapon* pWeapon );
		void PropWepActionExecuteHideAmmoFade( SFXWeapon* pWeapon, BioPawn* pActor );
		Float PropWepActionTimingHideAmmoInstant( SFXWeapon* pWeapon );
		void PropWepActionExecuteHideAmmoInstant( SFXWeapon* pWeapon, BioPawn* pActor );
		Float PropWepActionTimingShowAmmo( SFXWeapon* pWeapon );
		void PropWepActionExecuteShowAmmo( SFXWeapon* pWeapon, BioPawn* pActor );
		Float PropWepActionTimingDisableIK( SFXWeapon* pWeapon );
		void PropWepActionExecuteDisableIK( SFXWeapon* pWeapon, BioPawn* pActor, SkelControlBase* pSkelControl );
		Float PropWepActionTimingEnableIK( SFXWeapon* pWeapon );
		void PropWepActionExecuteEnableIK( SFXWeapon* pWeapon, BioPawn* pActor, SkelControlBase* pSkelControl, Float fOldBlend );
		Float PropWepActionTimingFireWithTracer( SFXWeapon* pWeapon );
		void PropWepActionExecuteFireWithTracer( SFXWeapon* pWeapon, BioPawn* pActor, Bool bSavedSuppress, Float fSavedTracerDistance, Bool bSavedForced, Vector vHitLocation, Vector vTmp, Rotator rTmp, SkeletalMeshComponent* pMeshCmp );
		Float PropWepActionTimingReload( SFXWeapon* pWeapon, Int nLooping );
		void PropWepActionExecuteReload( SFXWeapon* pWeapon, BioPawn* pActor );
		Float PropWepActionTimingCollapse( SFXWeapon* pWeapon, SkeletalMeshComponent* pMeshComp, AnimSet* pAnimSet, AnimSequence* pCurAnim, Int idx );
		void PropWepActionExecuteCollapse( SFXWeapon* pWeapon, BioPawn* pActor );
		Float PropWepActionTimingExpand( SFXWeapon* pWeapon, SkeletalMeshComponent* pMeshComp, AnimSet* pAnimSet, AnimSequence* pCurAnim, Int idx );
		void PropWepActionExecuteExpand( SFXWeapon* pWeapon, BioPawn* pActor );
		Float PropWepActionTimingFire( SFXWeapon* pWeapon, Int nLooping );
		void PropWepActionExecuteFire( SFXWeapon* pWeapon, BioPawn* pActor );
		Float FindPartSysMaxDuration( ParticleSystem* pParticleSystem, Int nLooping );
		SkeletalMesh* GetWeaponMesh( Class* cWeapon );
		void PropUnequipWeapon( BioPawn* pActor, SFXWeapon* pWeapon, Int nSpawned, Name nmRightHand, SkeletalMeshSocket* pSocket );
		void PropUnequipWeaponForInst( Class* cWeapon, BioEvtSysTrackPropInst* pInst, SFXWeapon* pFoundWeapon, Int nSpawned, BioPawn* pPawn );
		void PropEquipWeapon( Class* cWeapon, BioEvtSysTrackPropInst* pInst, Name nmRightHand, SkeletalMeshSocket* pSocket, SFXWeapon* pFoundWeapon, Int nSpawned, BioPawn* pPawn );
		SFXWeapon* PropGetPawnWeapon( Class* cWeapon, BioEvtSysTrackPropInst* pInst, SFXWeapon* pCurWpn, SFXWeapon* pFoundWeapon, Int nSpawned, BioPawn* pPawn );
		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	enum EDynamicStageNodes
	{
		EDynamicStageNodes_UNSET,
	};

	struct BioSetFacingData
	{
		Bool bApplyOrientation: 1; //offset = 0, size = 4
		Float fOrientation; //offset = 4, size = 4
		Byte eCurrentStageNode; //offset = 8, size = 1
		Name nmStageNode; //offset = 12, size = 8
	};

	class BioEvtSysTrackSetFacing: public SFXGameActorInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackSetFacing, SFXGameActorInterpTrack, SFXGame )

	public:

		Array<BioSetFacingData> m_aFacingKeys; //offset = 132, size = 12
		Bool m_bStageNodesLoaded: 1; //offset = 144, size = 4

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackSetFacingInst: public SFXGameActorInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackSetFacingInst, SFXGameActorInterpTrackInst, SFXGame )

	public:
	};

	struct BioSubtitleTrackData
	{
		Int nStrRefID; //offset = 0, size = 4
		Float fLength; //offset = 4, size = 4
		Bool bShowAtTop: 1; //offset = 8, size = 4
	};

	class BioEvtSysTrackSubtitles: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackSubtitles, SFXGameInterpTrack, SFXGame )

	public:

		Array<BioSubtitleTrackData> m_aSubtitleData; //offset = 108, size = 12
		BioTlkSet TalkTables; //offset = 120, size = 8

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackSubtitlesInst: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackSubtitlesInst, SFXGameInterpTrackInst, SFXGame )

	public:
	};

	enum EBioSwitchCamSpecific
	{
		SwitchCam_Unset,
	};

	struct BioCameraSwitchData
	{
		Bool bForceCrossingLineOfAction: 1; //offset = 0, size = 4
		Name nmExplicitCamera; //offset = 4, size = 8
		Int nIntimacy; //offset = 12, size = 4
		Byte eStandardCamera; //offset = 16, size = 1
		Byte eStageSpecificCamera; //offset = 17, size = 1
		Name nmStageSpecificCam; //offset = 20, size = 8
		Bool bUseForNextCamera: 1; //offset = 28, size = 4
	};

	class BioEvtSysTrackSwitchCamera: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackSwitchCamera, SFXGameInterpTrack, SFXGame )

	public:

		Array<BioCameraSwitchData> m_aCameras; //offset = 108, size = 12
		Bool m_bSpecificCamLoaded: 1; //offset = 120, size = 4

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackSwitchCameraInst: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackSwitchCameraInst, SFXGameInterpTrackInst, SFXGame )

	public:

		BioEvtSysTrackDOF* m_pDOFTrack; //offset = 68, size = 4
	};

	class BioEvtSysTrackVOElements: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackVOElements, SFXGameInterpTrack, SFXGame )

	public:

		Int m_nStrRefID; //offset = 108, size = 4
		Bool m_bIgnoreExportShrinking: 1; //offset = 112, size = 4
		Bool m_bIgnoreExportGrowing: 1; //offset = 112, size = 4
		Float m_fJCutOffset; //offset = 116, size = 4
		String sActorTag; //offset = 120, size = 12
		String m_sAnimSetName; //offset = 132, size = 12
		String m_sAnimName; //offset = 144, size = 12

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioEvtSysTrackVOElementsInst: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioEvtSysTrackVOElementsInst, SFXGameInterpTrackInst, SFXGame )

	public:
	};

	class BioInterpTrackInstMove: public InterpTrackInstMove
	{
		DECLARE_PACKAGE_CLASS( BioInterpTrackInstMove, InterpTrackInstMove, SFXGame )

	public:
	};

	class BioInterpTrackInstRotationMode: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioInterpTrackInstRotationMode, SFXGameInterpTrackInst, SFXGame )

	public:

		Float LastUpdatePosition; //offset = 68, size = 4
	};

	class BioInterpTrackMove: public InterpTrackMove
	{
		DECLARE_PACKAGE_CLASS( BioInterpTrackMove, InterpTrackMove, SFXGame )

	public:

		Name FacingController; //offset = 156, size = 8
	};

	struct RotationModeTrackKey
	{
		Float InterpTime; //offset = 0, size = 4
		Name LookAtGroupName; //offset = 4, size = 8
		Name FindActorTag; //offset = 12, size = 8
	};

	class BioInterpTrackRotationMode: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioInterpTrackRotationMode, SFXGameInterpTrack, SFXGame )

	public:

		Array<RotationModeTrackKey> EventTrack; //offset = 108, size = 12

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
	};

	class BioInterpTrackToggleConvInterrupt: public InterpTrackToggle
	{
		DECLARE_PACKAGE_CLASS( BioInterpTrackToggleConvInterrupt, InterpTrackToggle, SFXGame )

	public:

		Byte InterruptionType; //offset = 104, size = 1
	};

	class BioInterpTrackToggleConvInterruptInst: public InterpTrackInstToggle
	{
		DECLARE_PACKAGE_CLASS( BioInterpTrackToggleConvInterruptInst, InterpTrackInstToggle, SFXGame )

	public:
	};

	class BioScalarParameterInstTrack: public InterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioScalarParameterInstTrack, InterpTrackInst, SFXGame )

	public:

		Float ResetFloat; //offset = 60, size = 4
	};

	class BioScalarParameterTrack: public InterpTrackFloatBase
	{
		DECLARE_PACKAGE_CLASS( BioScalarParameterTrack, InterpTrackFloatBase, SFXGame )

	public:

		Name PropertyName; //offset = 108, size = 8
		Float InterpValue; //offset = 116, size = 4
		BioVisualEffect* m_pParentEffect; //offset = 120, size = 4
	};

	class BioVectorParameterInstTrack: public InterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioVectorParameterInstTrack, InterpTrackInst, SFXGame )

	public:

		Vector ResetVector; //offset = 60, size = 12
	};

	class BioVectorParameterTrack: public InterpTrackVectorBase
	{
		DECLARE_PACKAGE_CLASS( BioVectorParameterTrack, InterpTrackVectorBase, SFXGame )

	public:

		Name PropertyName; //offset = 108, size = 8
		Vector InterpValue; //offset = 116, size = 12
		BioVisualEffect* m_pParentEffect; //offset = 128, size = 4
	};

	struct BioVisualEffectTrackKey
	{
		Float Time; //offset = 0, size = 4
		Float Duration; //offset = 4, size = 4
		BioVisualEffect* m_Effect; //offset = 8, size = 4
	};

	class BioVisualEffectTrack: public InterpTrack
	{
		DECLARE_PACKAGE_CLASS( BioVisualEffectTrack, InterpTrack, SFXGame )

	public:

		Array<BioVisualEffectTrackKey> VisualEffects; //offset = 88, size = 12
		BioVisualEffect* Properties; //offset = 100, size = 4
	};

	class BioVisualEffectTrackInst: public InterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( BioVisualEffectTrackInst, InterpTrackInst, SFXGame )

	public:

		BioVisualEffect* m_VFX; //offset = 60, size = 4
		Float LastUpdatePosition; //offset = 64, size = 4

		void Create( BioVisualEffect* Base );
	};

	const char* SFX_AUDHELPER_NO_SPEAKER_FOUND = -1;

	struct BioScrubFaceFXInfo
	{
		BioPawn* pPawn; //offset = 0, size = 4
		FaceFXAsset* pAsset; //offset = 4, size = 4
		FaceFXAnimSet* pAnimSet; //offset = 8, size = 4
		String sAnimName; //offset = 12, size = 12
		Float fAnimPos; //offset = 24, size = 4
		Bool bDirty: 1; //offset = 28, size = 4
		WwiseBaseSoundObject* pVOSound; //offset = 32, size = 4
		Float fLineLength; //offset = 36, size = 4
	};

	struct BioScrubbingCamData
	{
		Vector vCamPos; //offset = 0, size = 12
		Rotator rCamRot; //offset = 12, size = 12
		Float fFov; //offset = 24, size = 4
		Float fNearPlane; //offset = 28, size = 4
		Float fAspectRatio; //offset = 32, size = 4
		Name nmStageCam; //offset = 36, size = 8
	};

	struct BioTrackInstPair
	{
		BioInterpTrack* pTrack; //offset = 0, size = 4
		BioInterpTrackInst* pInst; //offset = 4, size = 4
	};

	struct BioVOActorData
	{
		Actor* pActor; //offset = 0, size = 4
		Bool bSpawned: 1; //offset = 4, size = 4
		Vector vPreAudPos; //offset = 8, size = 12
		Rotator rPreAudRot; //offset = 20, size = 12
		Vector vAudInitPos; //offset = 32, size = 12
		Rotator rAudInitRot; //offset = 44, size = 12
		Name nmAudInitNode; //offset = 56, size = 8
		Name nmAudInitPose; //offset = 64, size = 8
		BioConvLightingData PreAuditionLightingData; //offset = 72, size = 68
		BioConvLightingData LineInitialLightingData; //offset = 140, size = 68
		Map_Mirror mapAudInitProps; //offset = 208, size = 20
		String sCollidesWith; //offset = 228, size = 12
	};

	struct BioVOActorType
	{
		String sTag; //offset = 0, size = 12
		String sActorType; //offset = 12, size = 12
	};

	class SFXConvAuditionHelper: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXConvAuditionHelper, Object, SFXGame )

	public:

		Array<BioVOActorType> m_aDefaultActorTypes; //offset = 60, size = 12
		Map_Mirror m_mapPawnHistory; //offset = 72, size = 20
		BioConversation* m_pConversation; //offset = 92, size = 4
		MultiMap_Mirror m_mapRefCount; //offset = 96, size = 20
		Map_Mirror m_mapStrRefToNodeIndex; //offset = 116, size = 20
		Map_Mirror m_mapNodeToParent; //offset = 136, size = 20
		Actor* m_pConvOwner; //offset = 156, size = 4
		Name m_nmConvOwnerTag; //offset = 160, size = 8
		BioStage* m_pConvStage; //offset = 168, size = 4
		BioSeqAct_StartConversation* m_pPlayAction; //offset = 172, size = 4
		BioSeqAct_OverrideStagePlacement* m_pOverrideAction; //offset = 176, size = 4
		Bool m_bFoundStageOverride: 1; //offset = 180, size = 4
		Bool m_bMale: 1; //offset = 180, size = 4
		Bool m_bCleanedUp: 1; //offset = 180, size = 4
		Bool m_bProfileConv: 1; //offset = 180, size = 4
		Bool m_bScrubUseCamData: 1; //offset = 180, size = 4
		Bool m_bScrubSaveCamData: 1; //offset = 180, size = 4
		Bool m_bScrubResetCamData: 1; //offset = 180, size = 4
		Bool m_bPlaySound: 1; //offset = 180, size = 4
		BioActorFactory* m_pFactory; //offset = 184, size = 4
		Map_Mirror m_mapCachedAnimsets; //offset = 188, size = 20
		m_srCurrentString m_srCurrentString; //offset = 208, size = 4
		BioScrubbingCamData m_tScrubOriginalCam; //offset = 212, size = 44
		BioScrubbingCamData m_tScrubCurrentCam; //offset = 256, size = 44
		BioScrubbingCamData m_tScrubInitialCam; //offset = 300, size = 44
		BioStageDOFData m_tScrubInitialDOF; //offset = 344, size = 12
		BioScrubFaceFXInfo m_tFaceFXInfo; //offset = 356, size = 40
		Float m_fPreviewLeadInTime; //offset = 396, size = 4
		Float m_fPreviewJCutTimePos; //offset = 400, size = 4
		Array<BioPawn*> m_aPawnMeshTickList; //offset = 404, size = 12
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_mActorLightingMap; //offset = 416, size = 20
	};

	class SFXGameInterpTrackCustom: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( SFXGameInterpTrackCustom, SFXGameInterpTrack, SFXGame )

	public:

		Actor* GetGroupLinkedActor( InterpTrackInst* TrackInst );
		Object* GetObjectRef( BioSeqVar_ObjectFindByTag* FindByTagVar );
		String GetNewTrackSubMenuName();
	};

	class SFXGameInterpTrackInstCustom: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( SFXGameInterpTrackInstCustom, SFXGameInterpTrackInst, SFXGame )

	public:
	};

	class SFXGameInterpTrackInstWwiseMicLock: public SFXGameInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( SFXGameInterpTrackInstWwiseMicLock, SFXGameInterpTrackInst, SFXGame )

	public:

		Map_Mirror m_mapCachedActors; //offset = 68, size = 20
	};

	struct BioMicLockData
	{
		Name m_nmFindActor; //offset = 0, size = 8
		Byte m_eFindActorMode; //offset = 8, size = 1
		Bool m_bLock: 1; //offset = 12, size = 4
	};

	class SFXGameInterpTrackWwiseMicLock: public SFXGameInterpTrack
	{
		DECLARE_PACKAGE_CLASS( SFXGameInterpTrackWwiseMicLock, SFXGameInterpTrack, SFXGame )

	public:

		Array<BioMicLockData> m_aMicLockKeys; //offset = 108, size = 12
		Bool m_bUnlockAtEnd: 1; //offset = 120, size = 4

		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrack_MoveTo: public InterpTrackMove
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrack_MoveTo, InterpTrackMove, SFXGame )

	public:
	};

	struct SFXAttachCrustEffectTrackData
	{
		Bool m_bAttach: 1; //offset = 0, size = 4
		Float m_fLifeTime; //offset = 4, size = 4
	};

	class SFXInterpTrackAttachCrustEffect: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackAttachCrustEffect, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<SFXAttachCrustEffectTrackData> m_aCrustEffectKeyData; //offset = 108, size = 12
		BioVFXTemplate* oEffect; //offset = 120, size = 4
		Array<BioSeqVar_ObjectFindByTag*> m_aTarget; //offset = 124, size = 12

		void TriggerKey( BioInterpTrackInst* pTrackInst, Bool bAttach, Float fLifeTime, BioSeqAct_AttachCrustEffect* Seq, Actor* CurrentTarget, Int I );
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackAttachToActor: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackAttachToActor, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<BioSeqVar_ObjectFindByTag*> m_aTarget; //offset = 108, size = 12
		Bool bDetach: 1; //offset = 120, size = 4
		Bool bHardAttach: 1; //offset = 120, size = 4
		Bool bUseRelativeOffset: 1; //offset = 120, size = 4
		Bool bUseRelativeRotation: 1; //offset = 120, size = 4
		Name BoneName; //offset = 124, size = 8
		Vector RelativeOffset; //offset = 132, size = 12
		Rotator RelativeRotation; //offset = 144, size = 12

		void TriggerKey( BioInterpTrackInst* pTrackInst, SeqAct_AttachToActor* Seq, Actor* CurrentTarget, Int I );
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackAttachVFXToObject: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackAttachVFXToObject, SFXGameInterpTrackCustom, SFXGame )

	public:

		Name m_nmSocketOrBone; //offset = 108, size = 8
		Vector m_vOffset; //offset = 116, size = 12
		BioVFXTemplate* m_oEffect; //offset = 128, size = 4
		Array<BioSeqVar_ObjectFindByTag*> m_aAttachToTarget; //offset = 132, size = 12

		void TriggerKey( BioInterpTrackInst* pTrackInst, BioSeqAct_AttachVisualEffect* Seq, Actor* CurrentTarget, Int I );
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	struct SFXBlackScreenTrackData
	{
		Byte BlackScreenState; //offset = 0, size = 1
		Int PlaceHolder; //offset = 4, size = 4
	};

	class SFXInterpTrackBlackScreen: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackBlackScreen, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<SFXBlackScreenTrackData> m_aBlackScreenKeyData; //offset = 108, size = 12
		BioSeqAct_BlackScreen* m_BlackScreenSeq; //offset = 120, size = 4

		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackDestroy: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackDestroy, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<BioSeqVar_ObjectFindByTag*> m_aTarget; //offset = 108, size = 12

		void TriggerKey( BioInterpTrackInst* pTrackInst, SeqAct_Destroy* Seq, Actor* CurrentTarget, Int I );
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackForceLightEnvUpdate: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackForceLightEnvUpdate, SFXGameInterpTrackCustom, SFXGame )

	public:

		BioSeqAct_ForceLightEnvUpdate* m_SeqForceUpdateLight; //offset = 108, size = 4

		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackInst_MoveTo: public InterpTrackInstMove
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackInst_MoveTo, InterpTrackInstMove, SFXGame )

	public:

		Vector StartLocation; //offset = 176, size = 12
		Rotator StartRotation; //offset = 188, size = 12
	};

	struct SFXLightEnvTrackData
	{
		Byte Quality; //offset = 0, size = 1
		Int PlaceHolder; //offset = 4, size = 4
	};

	class SFXInterpTrackLightEnvQuality: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackLightEnvQuality, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<SFXLightEnvTrackData> m_aLightEnvKeyData; //offset = 108, size = 12
		BioSeqAct_SetLightEnvQuality* m_LightEnvSeq; //offset = 120, size = 4

		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	enum EMoviePlayState
	{
		EMPS_Play,
		EMPS_Stop,
	};

	struct SFXMoviePlayStateData
	{
		Byte m_eState; //offset = 0, size = 1
		Int PlaceHolder; //offset = 4, size = 4
	};

	class SFXInterpTrackMovieBase: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackMovieBase, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<SFXMoviePlayStateData> m_aMovieKeyData; //offset = 108, size = 12

		String KeyDataArrayName();
	};

	class SFXInterpTrackMovieBink: public SFXInterpTrackMovieBase
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackMovieBink, SFXInterpTrackMovieBase, SFXGame )

	public:

		String m_sMovieName; //offset = 120, size = 12

		String KeyDataDisplayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackMovieTexture: public SFXInterpTrackMovieBase
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackMovieTexture, SFXInterpTrackMovieBase, SFXGame )

	public:

		TextureMovie* m_oTextureMovie; //offset = 120, size = 4

		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	struct BioFOVOTrackData
	{
		BioConversation* pConversation; //offset = 0, size = 4
		Int nLineStrRef; //offset = 4, size = 4
		Bool bForceHideSubtitles: 1; //offset = 8, size = 4
		Float fPadLineLength; //offset = 12, size = 4
		srActorNameOverride srActorNameOverride; //offset = 16, size = 4
		Bool bPlaySoundOnly: 1; //offset = 20, size = 4
		Bool bDisableDelayUntilPreload: 1; //offset = 20, size = 4
		Bool bAllowInConversation: 1; //offset = 20, size = 4
	};

	class SFXInterpTrackPlayFaceOnlyVO: public SFXGameActorInterpTrack
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackPlayFaceOnlyVO, SFXGameActorInterpTrack, SFXGame )

	public:

		Array<BioFOVOTrackData> m_aFOVOKeys; //offset = 132, size = 12

		String GetNewTrackSubMenuName();
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackPlayFaceOnlyVOInst: public SFXGameActorInterpTrackInst
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackPlayFaceOnlyVOInst, SFXGameActorInterpTrackInst, SFXGame )

	public:

		Array<BioSeqAct_FaceOnlyVO*> m_aFOVOObjects; //offset = 72, size = 12
	};

	struct SFXEnvEffectIntensityTrackData
	{
		Float m_fIntensity; //offset = 0, size = 4
		Float m_fBlendTime; //offset = 4, size = 4
	};

	class SFXInterpTrackSetEnvEffectIntensity: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackSetEnvEffectIntensity, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<SFXEnvEffectIntensityTrackData> m_aEnvEffIntKeyData; //offset = 108, size = 12
		BioSeqAct_SetEnvironmentEffectIntensity* m_EnvEffIntensitySeq; //offset = 120, size = 4

		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	struct SFXNearClipTrackData
	{
		Bool m_bUseDefaultValue: 1; //offset = 0, size = 4
		Float m_fValue; //offset = 4, size = 4
	};

	class SFXInterpTrackSetPlayerNearClipPlane: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackSetPlayerNearClipPlane, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<SFXNearClipTrackData> m_aNearClipKeyData; //offset = 108, size = 12

		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	struct SFXWeaponClassData
	{
		Class* cWeapon; //offset = 0, size = 4
	};

	class SFXInterpTrackSetWeaponInstant: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackSetWeaponInstant, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<SFXWeaponClassData> m_aWeaponClassKeyData; //offset = 108, size = 12
		BioSeqVar_ObjectFindByTag* m_PawnRefTag; //offset = 120, size = 4
		BioPawn* m_Pawn; //offset = 124, size = 4

		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	struct SFXToggleTrackData
	{
		Bool m_bToggle: 1; //offset = 0, size = 4
		Bool m_bEnable: 1; //offset = 0, size = 4
	};

	class SFXInterpTrackToggleBase: public SFXGameInterpTrackCustom
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackToggleBase, SFXGameInterpTrackCustom, SFXGame )

	public:

		Array<SFXToggleTrackData> m_aToggleKeyData; //offset = 108, size = 12
		BioSeqVar_ObjectFindByTag* m_Target; //offset = 120, size = 4
		Array<BioSeqVar_ObjectFindByTag*> m_aTarget; //offset = 124, size = 12
		Actor* m_TargetActor; //offset = 136, size = 4

		void SetupToggleSequenceOp( SequenceOp* Seq, Bool bToggle, Bool bEnable );
		String KeyDataDisplayName();
		String KeyDataArrayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackToggleAffectedByHitEffects: public SFXInterpTrackToggleBase
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackToggleAffectedByHitEffects, SFXInterpTrackToggleBase, SFXGame )

	public:

		void TriggerKey( BioInterpTrackInst* pTrackInst, Bool bToggle, Bool bEnable, SeqAct_ToggleAffectedByHitEffects* Seq, Pawn* oPawn, Int I );
		String KeyDataDisplayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackToggleHidden: public SFXInterpTrackToggleBase
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackToggleHidden, SFXInterpTrackToggleBase, SFXGame )

	public:

		void TriggerKey( BioInterpTrackInst* pTrackInst, Bool bToggle, Bool bEnable, SeqAct_ToggleHidden* Seq, Actor* CurrentTarget, Int I );
		String KeyDataDisplayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class SFXInterpTrackToggleLightEnvironment: public SFXInterpTrackToggleBase
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackToggleLightEnvironment, SFXInterpTrackToggleBase, SFXGame )

	public:

		BioSeqAct_ToggleLightEnv* m_LightEnvSeq; //offset = 140, size = 4

		String KeyDataDisplayName();
		String NewKeyDefaultName();
		Bool AllowKeyNaming();
	};

	class BioCodexMap: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCodexMap, Object, SFXGame )

	public:

		Map_Mirror SectionMap; //offset = 60, size = 20
		Map_Mirror PageMap; //offset = 80, size = 20
	};

	class BioStateEventMap: public Object
	{
		DECLARE_PACKAGE_CLASS( BioStateEventMap, Object, SFXGame )

	public:

		Map_Mirror StateEventMap; //offset = 60, size = 20
	};

	class BioConsequenceMap: public BioStateEventMap
	{
		DECLARE_PACKAGE_CLASS( BioConsequenceMap, BioStateEventMap, SFXGame )

	public:
	};

	class BioDiscoveredCodexMap: public Object
	{
		DECLARE_PACKAGE_CLASS( BioDiscoveredCodexMap, Object, SFXGame )

	public:

		Map_Mirror DiscoveredCodex; //offset = 60, size = 20

		void Clear();
	};

	struct TimedPlotUnlock_t
	{
		Int PlotBool; //offset = 0, size = 4
		Int UnlockDay; //offset = 4, size = 4
	};

	class BioGlobalVariableTable: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGlobalVariableTable, Object, SFXGame )

	public:

		Array<Int> BoolVariables; //offset = 60, size = 12
		Array<Int> IntVariables; //offset = 72, size = 12
		Array<Float> FloatVariables; //offset = 84, size = 12
		Array<TimedPlotUnlock_t> TimedPlotUnlocks; //offset = 96, size = 12
		Bio2DA* oNameLookupTable; //offset = 108, size = 4
		Bio2DA* AchievementTable; //offset = 112, size = 4

		void ClearAllVariables();
		ReturnValue GetStrRefByName( Name nmLabel, Int nIndex );
		void SetFloatByName( Name nmLabel, Float fValue );
		Float GetFloatByName( Name nmLabel );
		void SetIntByName( Name nmLabel, Int nValue );
		Int GetIntByName( Name nmLabel );
		void SetBoolByName( Name nmLabel, Bool bValue );
		Bool GetBoolByName( Name nmLabel );
		void SetFloat( Int nIndex, Float fValue );
		Float GetFloat( Int nIndex );
		void SetInt( Int nIndex, Int nValue );
		Int GetInt( Int nIndex );
		void SetBool( Int nIndex, Bool bValue, Bool bEvaluateAchievement );
		Bool GetBool( Int nIndex );
	};

	class BioOutcomeMap: public Object
	{
		DECLARE_PACKAGE_CLASS( BioOutcomeMap, Object, SFXGame )

	public:

		Map_Mirror OutcomeMapping; //offset = 60, size = 20
	};

	class BioQuestMap: public Object
	{
		DECLARE_PACKAGE_CLASS( BioQuestMap, Object, SFXGame )

	public:

		Map_Mirror QuestMap; //offset = 60, size = 20
		Map_Mirror TaskEvalMap; //offset = 80, size = 20
		Map_Mirror IntTaskEvalMap; //offset = 100, size = 20
		Map_Mirror FloatTaskEvalMap; //offset = 120, size = 20
	};

	class BioQuestProgressionMap: public Object
	{
		DECLARE_PACKAGE_CLASS( BioQuestProgressionMap, Object, SFXGame )

	public:

		Int nQuestProgressCounter; //offset = 60, size = 4
		Map_Mirror QuestProgression; //offset = 64, size = 20

		void Clear();
	};

	enum EBioBaseAppearanceReportMethod
	{
		BIO_BASE_APPEARANCE_REPORT_METHOD_NONE,
		BIO_BASE_APPEARANCE_REPORT_METHOD_LOG,
	};

	struct MorphFeatureType
	{
		Name sFeatureName; //offset = 0, size = 8
	};

	struct MorphFeatureModelType
	{
		Name sFeatureName; //offset = 0, size = 8
		SkeletalMeshComponent* MinModel; //offset = 8, size = 4
		SkeletalMeshComponent* MaxModel; //offset = 12, size = 4
	};

	class BioBaseAppearance: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioBaseAppearance, BioBaseComponent, SFXGame )

	public:

		Byte m_eReportMethod; //offset = 68, size = 1
		Name m_nmPhysicsImpactBone; //offset = 72, size = 8
		Float m_fVFXScale; //offset = 80, size = 4
		BioDeathVFX* m_pDeathVFX; //offset = 84, size = 4
		BioDeathVFXControl* m_pDeathVFXControl; //offset = 88, size = 4

		SkeletalMesh* GetModelByName( String S );
	};

	struct WeaponAnimSpec
	{
		String AnimType; //offset = 0, size = 12
		Array<AnimSet*> m_animSets; //offset = 12, size = 12
		AnimSet* m_drawAnimSet; //offset = 24, size = 4
	};

	struct OverrideAnimTreeTemplate
	{
		Byte eClassification; //offset = 0, size = 1
		AnimTree* AnimTreeTemplate; //offset = 4, size = 4
	};

	struct ModelVariation
	{
		Int NumVariations; //offset = 0, size = 4
		Int MaterialsPerVariation; //offset = 4, size = 4
		Bool m_bHasHeadGear: 1; //offset = 8, size = 4
	};

	struct ArmorTypes
	{
		Byte ArmorType; //offset = 0, size = 1
		Name m_meshPackageName; //offset = 4, size = 8
		Name m_materialPackageName; //offset = 12, size = 8
		Array<ModelVariation> Variations; //offset = 20, size = 12
		PhysicsAsset* ArmorPhysicsAsset; //offset = 32, size = 4
	};

	class Bio_Appr_Character_Body: public BioBaseAppearance
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_Body, BioBaseAppearance, SFXGame )

	public:

		Bio2DA* m_oMaterialVariationTranslationTable; //offset = 92, size = 4
		Array<ArmorTypes> Armor; //offset = 96, size = 12
		String AppearancePrefix; //offset = 108, size = 12
		Bio_Appr_Character_HeadGear* m_oHeadGearAppearance; //offset = 120, size = 4
		Bio_Appr_Character_Body_Settings* m_oSettings; //offset = 124, size = 4
		Array<AnimSet*> AnimSets; //offset = 128, size = 12
		OverrideAnimTreeTemplate AnimTreeTemplates[7]; //offset = 140, size = 8
		Float CollisionHeight; //offset = 196, size = 4
		Float CollisionRadius; //offset = 200, size = 4
		Float CollisionCrouchHeight; //offset = 204, size = 4
		Float CollisionReadyHeight; //offset = 208, size = 4
		Float Scale; //offset = 212, size = 4
		Bool bEnableStartAnims: 1; //offset = 216, size = 4
		Bool bEnableSkidAnims: 1; //offset = 216, size = 4
		Bool bEnableStopAnims: 1; //offset = 216, size = 4
		Bool bAllowStartAnimInCombat: 1; //offset = 216, size = 4
		Bool bAllowSkidAnimInCombat: 1; //offset = 216, size = 4
		Bool bAllowStopAnimInCombat: 1; //offset = 216, size = 4
		Bool bEnableMountRootMotion: 1; //offset = 216, size = 4
		Bool bEnableStartRootMotion: 1; //offset = 216, size = 4
		Bool bEnableStopRootMotion: 1; //offset = 216, size = 4
		Bool bEnableLookAtTargeting: 1; //offset = 216, size = 4
		Bool bUseWallSlideSpeedAdjust: 1; //offset = 216, size = 4
		Bool bEnableRagdollRecovery: 1; //offset = 216, size = 4
		Bool bInvertRagdollRecoverBoneAxis: 1; //offset = 216, size = 4
		Bool bRecoverDirSwap: 1; //offset = 216, size = 4
		Bool bInvertRagdollRecoverDirSwapBoneAxis: 1; //offset = 216, size = 4
		Bool bEnableMeshAdj: 1; //offset = 216, size = 4
		Bool bUseManualAdj: 1; //offset = 216, size = 4
		Bool m_bCanPortArms: 1; //offset = 216, size = 4
		Bool m_bCanCrouch: 1; //offset = 216, size = 4
		Bool m_bCanWalk: 1; //offset = 216, size = 4
		Bool m_bCanFly: 1; //offset = 216, size = 4
		Bool m_bCanLand: 1; //offset = 216, size = 4
		Bool m_bSuppressPitch: 1; //offset = 216, size = 4
		Float InclineUpMoveMod; //offset = 220, size = 4
		Float InclineDownMoveMod; //offset = 224, size = 4
		Float SkidTurnThreshold; //offset = 228, size = 4
		Float PawnMoveStopDecelTime; //offset = 232, size = 4
		Float LookAtRotationMinHoldTime; //offset = 236, size = 4
		Float LookAtRotationMaxHoldTime; //offset = 240, size = 4
		Float LookAtRotationMaxHoldAngle; //offset = 244, size = 4
		Float LookAtSpeedDEBUG; //offset = 248, size = 4
		Name RagdollRecoverBone; //offset = 252, size = 8
		Byte RagdollRecoverBoneAxis; //offset = 260, size = 1
		Byte RagdollRecoverDirSwapBoneAxis; //offset = 261, size = 1
		Float RagdollRecoverPhysBlendTime; //offset = 264, size = 4
		Name RagdollRecoverDirSwapBone; //offset = 268, size = 8
		Float MeshAdjRate; //offset = 276, size = 4
		Float ManualMeshAdj; //offset = 280, size = 4
		WeaponAnimSpec m_weaponAnimSpecs[9]; //offset = 284, size = 28
		Array<WeaponAnimSpec> WeaponAnimSpecs; //offset = 536, size = 12

		Bool GetMaterial( Int ArmorType, Int ModelVar, Int MaterialVar, Array<MaterialInterface*> Materials );
		Bool IsValidVariation( Int ArmorType, Int ModelVar, Int MaterialVar );
		PhysicsAsset* GetPhysics( Int ArmorType, Int ModelVar );
		String GetPhysics_Name( Int ArmorType, Int ModelVar );
		SkeletalMesh* GetModel( Int ArmorType, Int ModelVar );
	};

	enum eModelType
	{
		BioMT_BodyAndHead,
		BioMT_Simple,
	};

	enum eHairVar
	{
		BioHTV_Hat1,
		BioHTV_Hat2,
		BioHTV_Hat3,
		BioHTV_Hat4,
		BioHTV_Hat5,
	};

	enum eHeadVar
	{
		BioHV_Head1,
		BioHV_Head2,
		BioHV_Head3,
		BioHV_Head4,
		BioHV_Head5,
	};

	enum eMaterialVar
	{
		BioTV_Sophistication1,
		BioTV_Sophistication2,
		BioTV_Sophistication3,
		BioTV_Sophistication4,
		BioTV_Sophistication5,
	};

	enum eModelVar
	{
		BioMV_Variation1,
		BioMV_Variation2,
		BioMV_Variation3,
		BioMV_Variation4,
		BioMV_Variation5,
	};

	struct LookAtBoneDef
	{
		Name m_nBoneName; //offset = 0, size = 8
		Float m_fLimit; //offset = 8, size = 4
		Float m_fUpDownLimit; //offset = 12, size = 4
		Float m_fDelay; //offset = 16, size = 4
		Byte m_nLookAxis; //offset = 20, size = 1
		Byte m_nUpAxis; //offset = 21, size = 1
		Bool m_bSeparateUpDownLimit: 1; //offset = 24, size = 4
		Bool m_bUseUpAxis: 1; //offset = 24, size = 4
		Bool m_bLookAtInverted: 1; //offset = 24, size = 4
		Bool m_bUpAxisInverted: 1; //offset = 24, size = 4
		Float m_fSpeedFactor; //offset = 28, size = 4
		Float m_fConversationStrength; //offset = 32, size = 4
	};

	class Bio_Appr_Character: public BioBaseAppearance
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character, BioBaseAppearance, SFXGame )

	public:

		Byte ModelType; //offset = 92, size = 1
		Bio_Appr_Character_Settings* m_oSettings; //offset = 96, size = 4
		Bool HideEquipedItems: 1; //offset = 100, size = 4
		Bool CanStrafe: 1; //offset = 100, size = 4
		Array<Bio_Appr_Character_Head*> Head; //offset = 104, size = 12
		Bio_Appr_Character_Body* Body; //offset = 116, size = 4
		Name BloodColor; //offset = 120, size = 8
		BioVFXTemplate* LifetimeCrust; //offset = 128, size = 4
		BioVFXTemplate* DeathCrust; //offset = 132, size = 4
		Float LifetimeMaterialFadeDuration; //offset = 136, size = 4
		Name CreatureSpeed; //offset = 140, size = 8
		SFXMovementData* MovementInfo; //offset = 148, size = 4
		Vector vProceduralCameraPosition; //offset = 152, size = 12
		Rotator rProceduralCameraRotation; //offset = 164, size = 12
		Vector vCameraFocusPoint; //offset = 176, size = 12
		Float fFov; //offset = 188, size = 4
		Float fNearClip; //offset = 192, size = 4
		Float fDOFFocusInnerRadius; //offset = 196, size = 4
		Float fDOFFocusDistance; //offset = 200, size = 4
		BioLookAtDefinition* m_LookAtDefinition; //offset = 204, size = 4
		Array<LookAtBoneDef> m_aLookBoneDefs; //offset = 208, size = 12
		AnimSet* m_pDefaultGesturesPoseSet; //offset = 220, size = 4
		Name m_nmDefaultGesturesPoseAnim; //offset = 224, size = 8
		BioDynamicAnimSet* m_pCookedDefGestPoseSet; //offset = 232, size = 4
		FaceFXAsset* DefaultFaceFXAsset; //offset = 236, size = 4
	};

	class Bio_Appr_Character_Hair: public BioBaseAppearance
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_Hair, BioBaseAppearance, SFXGame )

	public:

		Bio_Appr_Character_Hair_Settings* m_oSettings; //offset = 92, size = 4
		SkeletalMesh* m_oModelMesh; //offset = 96, size = 4
		Array<MaterialInterface*> m_aMaterials; //offset = 100, size = 12

		SkeletalMesh* GetModel();
	};

	struct BioWrinkleConfig
	{
		String WrinkleParameterName; //offset = 0, size = 12
		Texture2D* WrinkleTexture; //offset = 12, size = 4
	};

	struct BioCharacterHeadAppearanceMaterialConfig
	{
		Array<MaterialInterface*> m_aMaterials; //offset = 0, size = 12
	};

	class Bio_Appr_Character_Head: public BioBaseAppearance
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_Head, BioBaseAppearance, SFXGame )

	public:

		Bio_Appr_Character_Head_Settings* m_oSettings; //offset = 92, size = 4
		PhysicsAsset* PhysicsAsset; //offset = 96, size = 4
		Array<BioCharacterHeadAppearanceMaterialConfig> m_aMaterialConfig; //offset = 100, size = 12
		Bool HeadTrack: 1; //offset = 112, size = 4
		Bool UseWrinkles: 1; //offset = 112, size = 4
		String MorphConstraints; //offset = 116, size = 12
		Array<AnimSet*> AnimSets; //offset = 128, size = 12
		Array<Bio_Appr_Character_Hair*> m_aHairAppearance; //offset = 140, size = 12
		Array<BioWrinkleConfig> TextureOverrides; //offset = 152, size = 12
		Texture2D* WrinkleNormalMap; //offset = 164, size = 4
		Texture2D* WrinkleNormalMask; //offset = 168, size = 4
		Texture2D* WrinkleNormalMask; //offset = 172, size = 4
		FaceFXAsset* DefaultFaceFXAsset; //offset = 176, size = 4
		MaterialInterface* m_oPortraitMaterial; //offset = 180, size = 4
		SkeletalMesh* m_oModelMesh; //offset = 184, size = 4

		SkeletalMesh* GetModel();
	};

	struct BioFacePlateMeshSpec
	{
		Bool m_bHidesVisor: 1; //offset = 0, size = 4
		SkeletalMesh* m_pMesh; //offset = 4, size = 4
	};

	struct BioHeadGearAppearanceModelSpec
	{
		Int m_nMaterialConfigCount; //offset = 0, size = 4
		Int m_nMaterialCountPerConfig; //offset = 4, size = 4
		Bool m_bIsHairHidden: 1; //offset = 8, size = 4
		Bool m_bIsHeadHidden: 1; //offset = 8, size = 4
		Bool m_bSuppressFacePlate: 1; //offset = 8, size = 4
		Bool m_bSuppressVisor: 1; //offset = 8, size = 4
	};

	struct BioHeadGearAppearanceArmorSpec
	{
		Byte m_eArmorType; //offset = 0, size = 1
		Array<BioHeadGearAppearanceModelSpec> m_aModelSpec; //offset = 4, size = 12
		Name m_nmPackage; //offset = 16, size = 8
	};

	class Bio_Appr_Character_HeadGear: public BioBaseAppearance
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Character_HeadGear, BioBaseAppearance, SFXGame )

	public:

		Name m_nmPrefix; //offset = 92, size = 8
		BioHeadGearAppearanceArmorSpec m_aArmorSpec[5]; //offset = 100, size = 24
		Bio_Appr_Character_HeadGear_Settings* m_oSettings; //offset = 220, size = 4
		Byte m_eArmorType; //offset = 224, size = 1
		Array<BioFacePlateMeshSpec> m_aFacePlateMeshSpec; //offset = 228, size = 12
		Array<MaterialInterface*> m_apFacePlateMaterial; //offset = 240, size = 12
		Array<SkeletalMesh*> m_apVisorMesh; //offset = 252, size = 12
		Array<MaterialInterface*> m_apVisorMaterial; //offset = 264, size = 12
	};

	enum EBioStateEnumProxy
	{
		StateEnum_None,
	};

	struct VFXAPLStatePair
	{
		Name m_nmAPLState; //offset = 0, size = 8
		Byte m_VFXState; //offset = 8, size = 1
	};

	struct VisualEffectAttachment
	{
		BioVFXTemplate* m_oEffectTemplate; //offset = 0, size = 4
		Name m_nmSocket; //offset = 4, size = 8
		Array<VFXAPLStatePair> m_States; //offset = 12, size = 12
	};

	struct AudioAPLStatePair
	{
		Name m_nmAPLState; //offset = 0, size = 8
		SoundCue* m_SoundCue; //offset = 8, size = 4
	};

	struct StaticAttachments
	{
		Name BoneName; //offset = 0, size = 8
		StaticMesh* StaticMesh; //offset = 8, size = 4
	};

	class BioBaseAppearancePlaceable: public BioBaseAppearance
	{
		DECLARE_PACKAGE_CLASS( BioBaseAppearancePlaceable, BioBaseAppearance, SFXGame )

	public:

		Name PackageName; //offset = 92, size = 8
		Name PlaceablePrefix; //offset = 100, size = 8
		Int MaterialPerVariation; //offset = 108, size = 4
		Array<Name> MaterialVariationList; //offset = 112, size = 12
		PhysicsAsset* PhysicsAsset; //offset = 124, size = 4
		PhysicsAsset* DestroyedPhysicsAsset; //offset = 128, size = 4
		Array<AnimSet*> AnimSets; //offset = 132, size = 12
		BioFSM* FSM; //offset = 144, size = 4
		SoundCue* SoundCue; //offset = 148, size = 4
		StaticMesh* m_oStaticMesh; //offset = 152, size = 4
		StaticMesh* m_oDestroyedStaticMesh; //offset = 156, size = 4
		SkeletalMesh* m_oSkeletalMesh; //offset = 160, size = 4
		SkeletalMesh* m_oDestroyedSkeletalMesh; //offset = 164, size = 4
		Bool bOneAnimFrameStates: 1; //offset = 168, size = 4
		Array<AudioAPLStatePair> m_AudioStates; //offset = 172, size = 12
		AudioComponent* oAudioComponent; //offset = 184, size = 4
		Int nInstigatorVFXOffset; //offset = 188, size = 4
		Array<VisualEffectAttachment> VisualEffects; //offset = 192, size = 12
		Array<VisualEffectAttachment> VFXOnInstigator; //offset = 204, size = 12
		Float Scale; //offset = 216, size = 4
		AnimTree* AnimationTree; //offset = 220, size = 4
		Class* pNewActorClass; //offset = 224, size = 4
		String sThumbnailLabel; //offset = 228, size = 12
		String sMenuLabel; //offset = 240, size = 12
		Vector m_vTargetLocationOffset; //offset = 252, size = 12
	};

	class Bio_Appr_Container: public BioBaseAppearancePlaceable
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Container, BioBaseAppearancePlaceable, SFXGame )

	public:
	};

	class Bio_Appr_Door: public BioBaseAppearancePlaceable
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Door, BioBaseAppearancePlaceable, SFXGame )

	public:
	};

	class Bio_Appr_Inert: public BioBaseAppearancePlaceable
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Inert, BioBaseAppearancePlaceable, SFXGame )

	public:
	};

	class Bio_Appr_Useable: public BioBaseAppearancePlaceable
	{
		DECLARE_PACKAGE_CLASS( Bio_Appr_Useable, BioBaseAppearancePlaceable, SFXGame )

	public:
	};

	class BioAppearanceItem: public BioBaseAppearance
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceItem, BioBaseAppearance, SFXGame )

	public:
	};

	class BioAppearanceItemEquippable: public BioAppearanceItem
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceItemEquippable, BioAppearanceItem, SFXGame )

	public:
	};

	struct WeaponEffects
	{
		BioVISWeapon* VisualImpactSet; //offset = 0, size = 4
		BioVFXTemplate* vfxMuzzleFlash; //offset = 4, size = 4
		BioVFXTemplate* vfxMuzzleFlash2; //offset = 8, size = 4
		BioVFXTemplate* vfxTracer; //offset = 12, size = 4
		BioVFXTemplate* vfxCoolDown; //offset = 16, size = 4
		BioVFXTemplate* vfxSabotage; //offset = 20, size = 4
		BioVFXTemplate* vfxReload; //offset = 24, size = 4
	};

	struct BioAppearanceItemSophisticatedVariant
	{
		Int m_Label; //offset = 0, size = 4
		AnimSet* m_oWeaponAnimSet; //offset = 4, size = 4
		AnimTree* m_oWeaponAnimTree; //offset = 8, size = 4
		PhysicsAsset* m_oPhysicsAsset; //offset = 12, size = 4
		SkeletalMesh* m_oModelMesh; //offset = 16, size = 4
		Array<MaterialInterface*> m_aMaterials; //offset = 20, size = 12
	};

	class BioAppearanceItemSophisticated: public BioAppearanceItemEquippable
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceItemSophisticated, BioAppearanceItemEquippable, SFXGame )

	public:

		Array<BioAppearanceItemSophisticatedVariant> m_variants; //offset = 92, size = 12
		Int m_previewVariantLabel; //offset = 104, size = 4

		PhysicsAsset* GetPhysicsAsset( Int Variant );
		AnimTree* GetAnimationTree( Int Variant );
		AnimSet* GetAnimationSet( Int Variant );
		void ApplyMaterials( Int Variant, SkeletalMeshComponent* SkeletalMeshComponent );
		SkeletalMesh* GetSkeletalMesh( Int Variant );
	};

	enum EBioAppearanceItemWeaponVFXDamageEnum
	{
		BIO_APPEARANCE_ITEM_WEAPON_VFX_DAMAGE_ENUM_PLACEHOLDER,
	};

	struct BioAppearanceItemWeaponVFXSpec
	{
		Int m_type; //offset = 0, size = 4
		Byte m_Damage; //offset = 4, size = 1
		BioWeaponVFXAppearance* m_appearance; //offset = 8, size = 4
	};

	class BioAppearanceItemWeapon: public BioAppearanceItemSophisticated
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceItemWeapon, BioAppearanceItemSophisticated, SFXGame )

	public:

		AnimSet* m_oPawnWeaponAnimations; //offset = 108, size = 4
		Array<BioAppearanceItemWeaponVFXSpec> m_vfxSpecs; //offset = 112, size = 12
		Bio2DA* m_vfxWeaponType; //offset = 124, size = 4
		Bio2DA* m_vfxDamageEnum; //offset = 128, size = 4
		Bool m_isEBioAppearanceItemWeaponVFXDamageEnumValid: 1; //offset = 132, size = 4
	};

	struct BioVehicleSoundEntityStateInfo
	{
		String sStateName; //offset = 0, size = 12
		String sStateValue; //offset = 12, size = 12
	};

	struct BioVehicleThrusterInfo
	{
		Name nmThrusterSocket; //offset = 0, size = 8
	};

	struct BioVehicleTurretInfo
	{
		Name nmAttachSocket; //offset = 0, size = 8
		Name nmTurretYawBone; //offset = 8, size = 8
		Name nmTurretPitchBone; //offset = 16, size = 8
		Name nmYawController; //offset = 24, size = 8
		Name nmPitchController; //offset = 32, size = 8
	};

	struct BioVehicleAttachmentInfo
	{
		ActorComponent* oComponentToAttach; //offset = 0, size = 4
		Name nmAttachSocket; //offset = 4, size = 8
		Array<MaterialInterface*> aMeshMaterials; //offset = 12, size = 12
	};

	class BioAppearanceVehicle: public BioBaseAppearance
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceVehicle, BioBaseAppearance, SFXGame )

	public:

		BioAppearanceVehicleSettings* m_oSettings; //offset = 92, size = 4
		AnimSet* m_oVehicleAnimSet; //offset = 96, size = 4
		AnimTree* m_oVehicleAnimTree; //offset = 100, size = 4
		PhysicsAsset* m_oPhysicsAsset; //offset = 104, size = 4
		Name m_nmPhysicsBone; //offset = 108, size = 8
		Array<BioVehicleAttachmentInfo> m_aAttachment; //offset = 116, size = 12
		Array<BioVehicleTurretInfo> m_aTurrets; //offset = 128, size = 12
		Array<BioVehicleThrusterInfo> m_aThrusters; //offset = 140, size = 12
		Int m_nThrusterVFXIndex; //offset = 152, size = 4
		Array<BioVFXAppearanceVehicleThruster*> m_aThrusterVFX; //offset = 156, size = 12
		SoundCue* m_oVehicleSoundCue; //offset = 168, size = 4
		BioVehicleSoundEntityStateInfo m_VehicleStart; //offset = 172, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleStop; //offset = 196, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleThrusterStart; //offset = 220, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleThrusterStop; //offset = 244, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleInAcceleration; //offset = 268, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleInDeceleration; //offset = 292, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleSpringsSoftActivated; //offset = 316, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleSpringsSoftDeactivated; //offset = 340, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleSpringsMedActivated; //offset = 364, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleSpringsMedDeactivated; //offset = 388, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleSpringsHardActivated; //offset = 412, size = 24
		BioVehicleSoundEntityStateInfo m_VehicleSpringsHardDeactivated; //offset = 436, size = 24
		Float m_fSuspensionSoundContactForceThresholdSoft; //offset = 460, size = 4
		Float m_fSuspensionSoundContactForceThresholdMedium; //offset = 464, size = 4
		Float m_fSuspensionSoundContactForceThresholdHard; //offset = 468, size = 4
		MorphTargetSet* m_oDamageMorphSet; //offset = 472, size = 4
		Name m_oDamageNodeWeight; //offset = 476, size = 8
		BioVFXTemplate* m_oDamageVFXTemplate; //offset = 484, size = 4
		Float m_fDamageVFXStartThresholdPercent; //offset = 488, size = 4
		Array<Name> m_aWeaponItemLabel; //offset = 492, size = 12
		Float m_fCameraFollowDistance; //offset = 504, size = 4
		Float m_fCameraFollowHeight; //offset = 508, size = 4
		Name m_nmCameraHook; //offset = 512, size = 8
		Float m_fVehicleScale; //offset = 520, size = 4
		Float m_fUnitWheelRadius; //offset = 524, size = 4
		BioVehicleTrackSet* TrackSet; //offset = 528, size = 4
		SkeletalMesh* m_oVehicleModelMesh; //offset = 532, size = 4
		Array<MaterialInterface*> m_aMaterials; //offset = 536, size = 12
	};

	class BioBaseInterface: public Object
	{
		DECLARE_PACKAGE_CLASS( BioBaseInterface, Object, SFXGame )

	public:

		BioActorBehavior* m_pBioActorBehavior; //offset = 60, size = 4
	};

	class BioInterface_Appearance: public BioBaseInterface
	{
		DECLARE_PACKAGE_CLASS( BioInterface_Appearance, BioBaseInterface, SFXGame )

	public:

		Actor* pActor; //offset = 64, size = 4
		BioMorphFace* m_oMorphFace; //offset = 68, size = 4

		Class* GetSaveObjectClass();
		void ResetToDefaults();
		Bool UpdateAppearance( Bool bForceUpdate );
	};

	class BioInterface_Appearance_ArtPlaceable: public BioInterface_Appearance
	{
		DECLARE_PACKAGE_CLASS( BioInterface_Appearance_ArtPlaceable, BioInterface_Appearance, SFXGame )

	public:

		Bool UpdateAppearance( Bool bForceUpdate );
	};

	struct BioPawnLabelledHeadGearBool
	{
		Byte m_eComponent; //offset = 0, size = 1
		Bool m_bIsVisible: 1; //offset = 4, size = 4
	};

	struct BioPawnHeadGearVisibility
	{
		Bool m_bOverride: 1; //offset = 0, size = 4
		BioPawnLabelledHeadGearBool m_a[3]; //offset = 4, size = 8
	};

	struct CreatureSpeeds
	{
		Float fGroundSpeed; //offset = 0, size = 4
		Float fAirSpeed; //offset = 4, size = 4
		Float fWaterSpeed; //offset = 8, size = 4
		Float fClimbSpeed; //offset = 12, size = 4
		Float fWalkSpeed; //offset = 16, size = 4
		Float fSprintSpeed; //offset = 20, size = 4
		Float fExploreSprintSpeed; //offset = 24, size = 4
		Float fTacticalSpeed; //offset = 28, size = 4
		Float fTacWalkSpeed; //offset = 32, size = 4
		Float fTacCrouchSpeed; //offset = 36, size = 4
		Float fTacCrouchWalkSpeed; //offset = 40, size = 4
		Float fTurnSpeedHigh; //offset = 44, size = 4
		Float fTurnSpeedLow; //offset = 48, size = 4
		Float fTurnSpeedCombat; //offset = 52, size = 4
		Float fTurnSpeedCombatCrouch; //offset = 56, size = 4
		Float fTurnSpeedCombatSprint; //offset = 60, size = 4
		Float fStandardFriction; //offset = 64, size = 4
		Float fAccelRate; //offset = 68, size = 4
		Float fMaxDSAccel; //offset = 72, size = 4
		Float fMaxDSDecel; //offset = 76, size = 4
		Float fMaxDSAccelTac; //offset = 80, size = 4
		Float fMaxDSDecelTac; //offset = 84, size = 4
		Float fMaxDSAccelTacCrouch; //offset = 88, size = 4
		Float fMaxDSDecelTacCrouch; //offset = 92, size = 4
	};

	class BioInterface_Appearance_Pawn: public BioInterface_Appearance
	{
		DECLARE_PACKAGE_CLASS( BioInterface_Appearance_Pawn, BioInterface_Appearance, SFXGame )

	public:

		Bio_Appr_Character_Settings* m_oSettings; //offset = 72, size = 4
		Name CreatureSpeedOverride; //offset = 76, size = 8
		BioMaterialOverride* m_pMaterialParameters; //offset = 84, size = 4
		BioPawnHeadGearVisibility m_headGearVisibilityOverride; //offset = 88, size = 28
		BioPawnHeadGearVisibility m_headGearVisibilityRunTimeOverride; //offset = 116, size = 28
		BioPawnHeadGearVisibility m_cachedHeadGearVisibility; //offset = 144, size = 28
		Bool m_bHeadGearVisiblePreference: 1; //offset = 172, size = 4
		Name m_nmCreatureSpeed; //offset = 176, size = 8
		Name m_nmBloodColor; //offset = 184, size = 8
		Bio2DA* m_oCreatureSpeedsTable; //offset = 192, size = 4

		Float GetDefaultCollisionReadyHeight();
		Float GetDefaultCollisionCrouchHeight();
		Float GetDefaultCollisionRadius();
		Float GetDefaultCollisionHeight();
		void GetCreatureSpeeds( CreatureSpeeds SpeedsRecord );
		Bool UpdateAppearance( Bool bForceUpdate );
		void ExtractResources( BioPawn* Pawn, Bio_Appr_Character* Appearance );
		void SetHeadGearVisiblePreference( Bool B );
	};

	struct BioVehicleTurretRunTimeInfo
	{
		Bool m_bTurretAutoTrackYaw: 1; //offset = 0, size = 4
		Bool m_bTurretAutoTrackPitch: 1; //offset = 0, size = 4
		Float m_fCurrentTurretRelativeYaw; //offset = 4, size = 4
		Float m_fCurrentTurretRelativePitch; //offset = 8, size = 4
	};

	class BioInterfaceAppearanceVehicle: public BioInterface_Appearance
	{
		DECLARE_PACKAGE_CLASS( BioInterfaceAppearanceVehicle, BioInterface_Appearance, SFXGame )

	public:

		Array<BioVehicleTurretRunTimeInfo> m_aTurretRuntimeInfo; //offset = 72, size = 12

		void ResetToDefaults();
		Bool UpdateAppearance( Bool bForceUpdate );
	};

	class BioActorType: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioActorType, BioBaseComponent, SFXGame )

	public:

		Class* m_clsActor; //offset = 68, size = 4
		Bool m_bMin1Health: 1; //offset = 72, size = 4
		Bool m_bTargetable: 1; //offset = 72, size = 4
		Bool m_bCombatTargetable: 1; //offset = 72, size = 4
		Bool m_bDefaultActionPossibleOverridden: 1; //offset = 72, size = 4
		Bool m_bPlotProtected: 1; //offset = 72, size = 4
		Bool m_bSuppressDisintegration: 1; //offset = 72, size = 4
		String ActorGameName; //offset = 76, size = 12
		ActorGameNameStrRef ActorGameNameStrRef; //offset = 88, size = 4
		Float m_fPhysicsDamageRelativeVelocityThreshold; //offset = 92, size = 4
		Float m_fPhysicsDamageScalar; //offset = 96, size = 4
		Float m_fPhysicsDamageImpulseScalar; //offset = 100, size = 4
		Float m_fPhysicsDamageMinThreshold; //offset = 104, size = 4
		Float m_fPhysicsDamageMaxAllowedPerHit; //offset = 108, size = 4
		Int m_nPhysicsLevel; //offset = 112, size = 4
		Float m_fUseRange; //offset = 116, size = 4
		Int m_nRequiredScanLevel; //offset = 120, size = 4
		m_nTargetTipText m_nTargetTipText; //offset = 124, size = 4
		Array<Name> m_aPowers; //offset = 128, size = 12
		Bio2DA* m_CharacterIcons; //offset = 140, size = 4
		Int m_nCharHeadId; //offset = 144, size = 4
		SFXVocalizationBank* VocalizationBank; //offset = 148, size = 4

		Bool IsDisintegrationSuppressed();
		Bool IsPlotProtected();
		Int GetSquadWheelIcon();
		ReturnValue GetSquadName();
		Int GetSquadIcon( Bool bIsDead );
	};

	class BioInteractiveActorType: public BioActorType
	{
		DECLARE_PACKAGE_CLASS( BioInteractiveActorType, BioActorType, SFXGame )

	public:
	};

	enum eArtPlaceableStates
	{
		APL_FSM_STATE_NONE,
	};

	enum eArtPlaceableRole
	{
		APR_NONE,
	};

	enum eMateralVariation
	{
		APMV = 2,
		APMV = 3,
		APMV = 4,
		APMV = 5,
		APMV = 6,
	};

	enum eBioAPLUseCase
	{
		APL_USE_TOGGLE,
		APL_USE_STATE0,
		APL_USE_STATE1,
		APL_USE_ELECTRONICS,
		APL_USE_DECRYPT,
	};

	class BioArtPlaceableType: public BioInteractiveActorType
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableType, BioInteractiveActorType, SFXGame )

	public:

		BioBaseAppearancePlaceable* m_oApperance; //offset = 152, size = 4
		Name m_nmDestroyedState; //offset = 156, size = 8
		Name m_nmDamagedState; //offset = 164, size = 8
		Byte m_eUseCase; //offset = 172, size = 1
		Byte m_StartingState; //offset = 173, size = 1
		Byte m_InertState; //offset = 174, size = 1
		Byte m_State0; //offset = 175, size = 1
		Byte m_State1; //offset = 176, size = 1
		Byte m_SkillDifficulty; //offset = 177, size = 1
		Byte m_eRole; //offset = 178, size = 1
		Bool bPlayerOnly: 1; //offset = 180, size = 4
		Bool m_bPhysicsAffectable: 1; //offset = 180, size = 4
		Bool m_bPhysicsAffectableOnDestroyed: 1; //offset = 180, size = 4
		Bool m_bPhysicsFixedAnimated: 1; //offset = 180, size = 4
		Bool m_bIsContainer: 1; //offset = 180, size = 4
		Bool m_bAllowRoleCustomization: 1; //offset = 180, size = 4
		Bool m_bIsStatic: 1; //offset = 180, size = 4
		Bool m_bIsMovable: 1; //offset = 180, size = 4
		Bool m_bIsDeletable: 1; //offset = 180, size = 4
		Name DefaultStartingState; //offset = 184, size = 8
		Name OnUseSucceed; //offset = 192, size = 8
		Name OnUseFail; //offset = 200, size = 8
		Name DefaultInertState; //offset = 208, size = 8
		BioArtPlaceableRoles* m_RoleData; //offset = 216, size = 4

		void ApplyRoleToBehavior( BioArtPlaceableBehavior* oBehave );
		void AllowRoleCustomization( Bool bYes );
		void ApplyRole( Int nNewRole, BioArtPlaceableBehavior* oBehave );
	};

	class BioArtPlaceableInertType: public BioArtPlaceableType
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableInertType, BioArtPlaceableType, SFXGame )

	public:
	};

	struct ArtPlaceableProperty
	{
		String sPropertyName; //offset = 0, size = 12
		String sPropertyValue; //offset = 12, size = 12
	};

	struct ArtPlaceableRole
	{
		String sRoleName; //offset = 0, size = 12
		Array<ArtPlaceableProperty> aProperties; //offset = 12, size = 12
	};

	class BioArtPlaceableRoles: public Object
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableRoles, Object, SFXGame )

	public:

		ArtPlaceableRole oDefaults; //offset = 60, size = 24
		Array<ArtPlaceableRole> aRoles; //offset = 84, size = 12
	};

	enum EChallengeType
	{
		ChallengeType_None,
		ChallengeType_Minion,
		ChallengeType_Elite,
	};

	enum EAffiliationType
	{
		AffiliationType_None,
		AffiliationType_GenericMerc,
		AffiliationType_BloodPack,
	};

	enum ECharacterType
	{
		CharacterType_None,
		CharacterType_Human,
		CharacterType_Turian,
		CharacterType_Asari,
		CharacterType_Krogan,
		CharacterType_Quarian,
		CharacterType_Salarian,
		CharacterType_Vorcha,
		CharacterType_LightMech,
		CharacterType_HeavyMech,
		CharacterType_MechDog,
		CharacterType_Batarian,
	};

	enum ERaceType
	{
		RaceType_None,
		RaceType_Humanoid,
		RaceType_Machine,
	};

	enum eDefaultAIBehaviour
	{
		DAIB_NONE,
	};

	class BioPawnType: public BioInteractiveActorType
	{
		DECLARE_PACKAGE_CLASS( BioPawnType, BioInteractiveActorType, SFXGame )

	public:

		Float m_fPowerUsePercent; //offset = 152, size = 4
		Class* PawnClass; //offset = 156, size = 4
		Bool bIsFemale: 1; //offset = 160, size = 4
		Bool m_bIsArmorOverridden: 1; //offset = 160, size = 4
		Bool m_bCanBeBumped: 1; //offset = 160, size = 4
		Bool m_bTerminateRagdollOnDeath: 1; //offset = 160, size = 4
		Bool m_bCanBePhysicsImpacted: 1; //offset = 160, size = 4
		Class* AIController; //offset = 164, size = 4
		Byte m_eDefaultAIBehaviour; //offset = 168, size = 1
		Byte m_eReportMethod; //offset = 169, size = 1
		Byte m_eDefaultClassification; //offset = 170, size = 1
		Byte m_eUseRollingInPhysicsMode; //offset = 171, size = 1
		Byte RaceType; //offset = 172, size = 1
		Byte CharacterType; //offset = 173, size = 1
		Byte AffiliationType; //offset = 174, size = 1
		Byte ChallengeType; //offset = 175, size = 1
		Name m_nmDefaultAIBehaviour; //offset = 176, size = 8
		SFXLoadoutData* Loadout; //offset = 184, size = 4
		BioVFXTemplate* EliteCrust; //offset = 188, size = 4
		BioVFXTemplate* DeathCrust; //offset = 192, size = 4
		Bio_Appr_Character* m_oAppearance; //offset = 196, size = 4
		Bio_Appr_Character_Settings* m_oAppearanceSettings; //offset = 200, size = 4
		BioMaterialOverride* m_oMaterialOverrides; //offset = 204, size = 4
		BioMorphFace* m_oMorphFace; //offset = 208, size = 4
		Int m_nMinAutoLODLevel; //offset = 212, size = 4
		Float m_fPhysicsRecoverSpeedThreshold; //offset = 216, size = 4
		Float m_fPhysicsSettleDownTime; //offset = 220, size = 4
		Float m_fDeathAnimationMagnitudeThreshold; //offset = 224, size = 4
		Float m_fPhysicsThreshold; //offset = 228, size = 4
		Float m_fPhysicsThresholdRegenerationRate; //offset = 232, size = 4
		FaceFXAnimSet* m_pSndSetFaceFXPkg; //offset = 236, size = 4
		WwiseBaseSoundObject* m_oRollingIdle; //offset = 240, size = 4
		WwiseBaseSoundObject* m_oRollingStartMoving; //offset = 244, size = 4
		Color CharacterBloodColor[23]; //offset = 248, size = 4
	};

	class BioPawnChallengeScaledType: public BioPawnType
	{
		DECLARE_PACKAGE_CLASS( BioPawnChallengeScaledType, BioPawnType, SFXGame )

	public:
	};

	struct BioStageCamera
	{
		Name sCameraTag; //offset = 0, size = 8
		Float fFov; //offset = 8, size = 4
		Float fNearPlane; //offset = 12, size = 4
		BioStageDOFData tDOFData; //offset = 16, size = 12
	};

	class BioStageType: public BioActorType
	{
		DECLARE_PACKAGE_CLASS( BioStageType, BioActorType, SFXGame )

	public:

		SkeletalMesh* m_Mesh; //offset = 152, size = 4
		Array<BioStageCamera> m_CameraList; //offset = 156, size = 12
	};

	class BioVehicleBaseType: public BioInteractiveActorType
	{
		DECLARE_PACKAGE_CLASS( BioVehicleBaseType, BioInteractiveActorType, SFXGame )

	public:

		BioAppearanceVehicle* m_oAppearance; //offset = 152, size = 4
		BioAppearanceVehicleSettings* m_oAppearanceSettings; //offset = 156, size = 4
		Bool m_bMovementEnabled: 1; //offset = 160, size = 4
	};

	struct BioDamageReporter
	{
		Float fShieldDamage; //offset = 0, size = 4
		Float fShieldDamageCapacity; //offset = 4, size = 4
		Float fHealthDamage; //offset = 8, size = 4
		Float fToxicDamage; //offset = 12, size = 4
		Float fStabilityDamage; //offset = 16, size = 4
		Float fDamageResistance; //offset = 20, size = 4
		Float fToxicResistance; //offset = 24, size = 4
	};

	struct BioVOSettings
	{
		Color cSubtitleColour; //offset = 0, size = 4
		Byte nSubtitleMode; //offset = 4, size = 1
		Bool bSuppressSubtitlesIfVO: 1; //offset = 8, size = 4
		Bool bAlert: 1; //offset = 8, size = 4
	};

	class BioActorBehavior: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioActorBehavior, BioBaseComponent, SFXGame )

	public:

		Bool m_bAreShieldsDisabled: 1; //offset = 68, size = 4
		Bool ActorGameNameOverride: 1; //offset = 68, size = 4
		Bool bActive: 1; //offset = 68, size = 4
		Bool m_bMin1HealthOverride: 1; //offset = 68, size = 4
		Bool m_bMin1Health: 1; //offset = 68, size = 4
		Bool bUseStringRefActorGameName: 1; //offset = 68, size = 4
		Bool bDisableFacefx: 1; //offset = 68, size = 4
		Bool Mountable: 1; //offset = 68, size = 4
		Bool AllowFall: 1; //offset = 68, size = 4
		Bool m_bIsBusy: 1; //offset = 68, size = 4
		Bool m_bInActionStation: 1; //offset = 68, size = 4
		Bool m_bAllowDamageInCombatStasis: 1; //offset = 68, size = 4
		Bool m_bTargetable: 1; //offset = 68, size = 4
		Bool m_bTargetableOverride: 1; //offset = 68, size = 4
		Bool m_bCombatTargetable: 1; //offset = 68, size = 4
		Bool m_bCombatTargetableOverride: 1; //offset = 68, size = 4
		Bool m_bUseRangeOverride: 1; //offset = 68, size = 4
		Bool m_bRequiredScanLevelOverride: 1; //offset = 68, size = 4
		Bool m_bTargetTipTextOverride: 1; //offset = 68, size = 4
		Bool m_bDefaultActionPossibleOverridden: 1; //offset = 68, size = 4
		Bool m_bDefaultActionPossible: 1; //offset = 68, size = 4
		Bool m_bPhysicsDamageEnabled: 1; //offset = 68, size = 4
		Bool m_bPhysicsDamageLoggingEnabled: 1; //offset = 68, size = 4
		Bool m_bPlotProtected: 1; //offset = 68, size = 4
		Bool m_bPlotProtectedOverride: 1; //offset = 68, size = 4
		Bool m_bSuppressDisintegration: 1; //offset = 68, size = 4
		Bool m_bSuppressDisintegrationOverride: 1; //offset = 68, size = 4
		String ActorGameName; //offset = 72, size = 12
		ActorGameNameStrRef ActorGameNameStrRef; //offset = 84, size = 4
		BioActorType* m_oActorType; //offset = 88, size = 4
		Color ActorGameNameColor; //offset = 92, size = 4
		BioInterface_Appearance* m_oAppearanceType; //offset = 96, size = 4
		Float m_fInteractionRange; //offset = 100, size = 4
		BioCombatLog* m_oCombatLog; //offset = 104, size = 4
		Float m_fHenchAimLagFactor; //offset = 108, size = 4
		Float m_fMaxHenchAimDist; //offset = 112, size = 4
		Array<BioSuperMode*> m_lSuperModeList; //offset = 116, size = 12
		BioSuperMode* m_oCurrentActiveSuperMode; //offset = 128, size = 4
		BioActive* m_oCurrentModalActive; //offset = 132, size = 4
		Array<BioActive*> m_aRegisteredActive; //offset = 136, size = 12
		Array<BioReactive*> m_aRegisteredReactive; //offset = 148, size = 12
		Array<BioReactive*> m_aPendingReactive; //offset = 160, size = 12
		Array<BioReactive*> m_aActivatedReactive; //offset = 172, size = 12
		Int m_nPreviousSuperMode; //offset = 184, size = 4
		BioActive* m_InstantPowerActive; //offset = 188, size = 4
		Name m_nmPowerAffectingActor; //offset = 192, size = 8
		Float m_fPowerAffectingActorTime; //offset = 200, size = 4
		BioCameraShakeInterface* m_cameraShakeInterface; //offset = 204, size = 4
		Int m_nLeaveActionStation; //offset = 208, size = 4
		BioDamageType* m_pBumpDamage; //offset = 212, size = 4
		BioDamageType* m_pPhysicsDamage; //offset = 216, size = 4
		Int m_nInvulnerabilityCount; //offset = 220, size = 4
		m_srStasisPowerText m_srStasisPowerText; //offset = 224, size = 4
		Float m_fUseRange; //offset = 228, size = 4
		Int m_nRequiredScanLevel; //offset = 232, size = 4
		Array<m_aTargetTipDefaults> m_aTargetTipDefaults; //offset = 236, size = 12
		Int m_nMaxTargetTipStrings; //offset = 248, size = 4
		m_nTargetTipTextOverridden m_nTargetTipTextOverridden; //offset = 252, size = 4
		Float m_fPhysicsDamagePerRelVel; //offset = 256, size = 4
		Float m_fPhysicsDamageImpulsePerRelVel; //offset = 260, size = 4
		Float m_fPhysicsDamageTimer; //offset = 264, size = 4
		Float m_fPhysicsDamageTimerMax; //offset = 268, size = 4
		Bool m_bPhysicsDamageIgnored: 1; //offset = 272, size = 4
		Float m_fPhysicsSoundLastTimePlayed; //offset = 276, size = 4
		Array<m_aPowerText> m_aPowerText; //offset = 280, size = 12
		Map_Mirror m_mLatentSequenceDataStore; //offset = 292, size = 20

		void SetActive( Bool bSetActive );
		Bool GetPowerText( String sPowerText );
		Bool IsDisintegrationSuppressed();
		Bool IsPlotProtected();
		Class* GetSaveObjectClass();
		Bool ExitCombatStasis();
		Bool EnterCombatStasis( Float fDuration, Bool bAllowDamage, srStasisPowerText srStasisPowerText );
		Bool MoveActorToFloor( Actor* oActor );
		Actor* SpawnActorFromType( String sActorResource, Vector vLocation, Rotator rRotation, Float fLifeSpan, Actor* oOwner );
		BioBaseAppearance* GetAppearanceTemplate();
		Bool DetachMesh( SkeletalMeshComponent* Mesh, SkeletalMeshComponent* subMesh );
		Bool AttachMeshToClosestBone( SkeletalMeshComponent* Mesh, Float fMeshDrawScale, SkeletalMeshComponent* subMesh, Vector subMeshPosition, Rotator subMeshRotation, Name BoneName, Vector boneRelativeLocation, Rotator boneRelativeRotation, Float fMeshDrawScaledInverted, Vector vBoneRelativeScale );
		void OnGPEvent( Byte eEvent, Object* pTarget );
		Bool GetBusyState();
		void SetBusyState( Bool bSetBusy );
		void OnAnimEnd( AnimNodeSequence* oAnimation, Float PlayedTime, Float ExcessTime );
		void AmplifyDamage( Float Damage );
		void HurtRadius( Float BaseDamage, Float DamageRadius, Class* DamageType, Float Momentum, Vector HurtOrigin, Actor* oDirectlyHitActor, DamageType* pDamage, Bool bDoFullDamage_FALSE, Controller* pInstigatorController, Pawn* pPawn, Actor* pDamageCausingActor_Owner );
		void RemoveFromActionStationOnDamage( Controller* InstigatedBy, BioEpicPawnBehavior* pEPBehavior, BioArtPlaceableBehavior* pAPBehavior, BioPawn* Pawn );
		void SetActorGameName( newActorGameName newActorGameName );
		String GetActorGameName();
		Bool IsMin1Health();
		Bool IsAbilityEnabled( Byte eEnableType, Name nmSubType );
		Int AbilityEnable( Bool bEnable, Byte eEnableType, Name nmSubType );
		BioBaseSquad* GetSquad();
		void SoftResetMovementAndAnimationState();
		void HardResetActionAndAnimationState();
		void ReleasePendingReactive( BioReactive* oReactive );
		Bool ReleaseActiveByClass( Class* oActiveToRelease );
		Bool ReleaseActive();
		BioReactive* AcquireReactive( Class* clsReactive, Actor* oInstigator );
		BioActive* SearchForActive( Class* clsActive );
		BioActive* AcquireActive( Class* clsActive, Bool bAutoStartActive );
		void RegisterReactive( Class* clsReactive, BioReactive* oReactive );
		void RegisterActive( Class* clsActive, BioActive* oActive );
		void PostBeginPlay();
		void EnableCollision( Bool bState );
		Bool IsDefaultActionPossible();
		Bool IsWithinUseRange( Vector vRefLocation );
		Float GetUseRange();
		Bool GetScanable( Int nInstigatorScanLevel );
		Bool IsSuperModeCurrentAndActive( Byte eSuperMode );
		void GetTargetTipText( Pawn* pSourcePawn, String strTip );
		BioSuperMode* FindSuperMode( Class* clsSuperMode );
		Bool SetSuperMode( Byte nSuperMode, Bool bActivate, Bool bReturnToSuperMode );
		Byte GetPreviousSuperMode();
		void TickBehavior( Float DeltaTime );
	};

	const char* Bio_Closed = 'Clos;
	const char* Bio_Opened = 'Open;
	const char* Bio_Physics = 'Phys;
	const char* Bio_SkillState = 'SkillS;

	class BioArtPlaceableBehavior: public BioActorBehavior
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableBehavior, BioActorBehavior, SFXGame )

	public:

		Byte MaterialVariation; //offset = 312, size = 1
		Name m_nCurrentMaterialVar; //offset = 316, size = 8
		Name StartingState; //offset = 324, size = 8
		Bool m_bStartingStateOverride: 1; //offset = 332, size = 4
		Bool m_bUseCaseOverride: 1; //offset = 332, size = 4
		Bool m_bPlayerOnly: 1; //offset = 332, size = 4
		Bool Enabled: 1; //offset = 332, size = 4
		Bool m_bInPhysics: 1; //offset = 332, size = 4
		Bool m_bPhysicsAffectableOverride: 1; //offset = 332, size = 4
		Bool m_bPhysicsAffectable: 1; //offset = 332, size = 4
		Bool m_bUseCustomCollisionSettings: 1; //offset = 332, size = 4
		Bool m_bDontInvalidatePaths: 1; //offset = 332, size = 4
		Bool m_bMonitorDoor: 1; //offset = 332, size = 4
		Bool bNoStateSave: 1; //offset = 332, size = 4
		Bool m_bSkillGameFailed: 1; //offset = 332, size = 4
		Bool m_bSkillGameXpAwarded: 1; //offset = 332, size = 4
		Name m_State0; //offset = 336, size = 8
		Name m_State1; //offset = 344, size = 8
		Byte m_eUseCase; //offset = 352, size = 1
		Byte m_SkillDifficulty; //offset = 353, size = 1
		Byte Region; //offset = 354, size = 1
		Byte Plot; //offset = 355, size = 1
		Byte Conditional; //offset = 356, size = 1
		BioWorldInfo* bioWorld; //offset = 360, size = 4
		Float m_fSkillProgress; //offset = 364, size = 4
		Name m_nmCurrentActivity; //offset = 368, size = 8
		String m_sConnectedObjectA; //offset = 376, size = 12
		String m_sConnectedObjectB; //offset = 388, size = 12
		Vector m_vLastImpactVector; //offset = 400, size = 12
		BioWp_DoorMarker* m_oDoorMarker; //offset = 412, size = 4
		Int m_nIndex; //offset = 416, size = 4
		String m_sVarName; //offset = 420, size = 12
		Int m_nPrevRegionIndex; //offset = 432, size = 4
		Int m_nPrevPlotIndex; //offset = 436, size = 4
		Name m_nmLastState; //offset = 440, size = 8
		Bool m_bInMatinee: 1; //offset = 448, size = 4
		Array<AnimSet*> m_aBackupAnimSets; //offset = 452, size = 12

		BioBaseSaveObject* WriteSaveObject( Object* InOuter, BioBaseSaveObject* Save, BioArtPlaceableType* Type );
		void ReadSaveObject( BioBaseSaveObject* Save );
		Class* GetSaveObjectClass();
		Bool ProceedWithMove( Pawn* oPawn );
		void SetWaitingForMove( Bool bVal );
		Bool IsPhysicsAffectable();
		Name GetStateFailure();
		Name GetStateSuccess();
		Bool IsTransitioning();
		void OnTransitionCPP( Name FromState, Name ToState );
		void ChangeStateMesh( Name nmState );
		void SetCollision( Bool bCollide );
		Name GetCurrentState();
		void ReactToImpulse( Vector vMomentum, Vector vHitLocation, BioArtPlaceable* oPlaceable, BioBaseAppearancePlaceable* pAppearance, SkeletalMeshComponent* oSkeletal, StaticMeshComponent* oStatic );
		void OnTransition( Name FromState, Name ToState, Bool bCallCPP, Int I );
		void OnArtPlaceablePlotFail( Actor* oUsingActor, Name nmToState, Int nCount );
		void OnArtPlaceableUsed( Actor* User, Name ToState, Int I );
		Bool IsInteractive(, Name nmInert );
		Name GetState();
		void PostBeginPlay( BioArtPlaceable* Placeable, BioArtPlaceableType* APType );
		Name GetStartingState();
		void DoDoorFinished( Name ToState );
		Bool HasTransition( Name ToState, Name Transition );
		Bool SetState( Name ToState, Name NamedTransition, Bool IgnoreTransition, Bool bRightNow, Bool bApplyVFX );
		Bool RequiresProximityTimer();
		void VerifyNotEditor();
		void ApplyVFXForState( Name NewState, Bool bForce );
		void PreloadVFX();
		void PlaySoundForState( Name oState );
		Bool IsMeshPhysicsCapable();
		void InitializeActionFramework();
	};

	enum EBioEpicPawnBehaviorWeaponFireMode
	{
		BIO_EPIC_PAWN_BEHAVIOR_WEAPON_FIRE_MODE_NORMAL,
		BIO_EPIC_PAWN_BEHAVIOR_WEAPON_FIRE_MODE_ALWAYS_HIT,
	};

	enum EBioAnimNodeCombatModeFadeOut
	{
		BIO_ANIM_NODE_COMBAT_MODE_FADEOUT_NONE,
		BIO_ANIM_NODE_COMBAT_MODE_FADEOUT_ANIMATING_ENTER,
		BIO_ANIM_NODE_COMBAT_MODE_FADEOUT_ENTER,
	};

	struct EpicPawnVisualEffect
	{
		Name m_nmLabel; //offset = 0, size = 8
		BioVFXTemplate* m_oVFXTemplate; //offset = 8, size = 4
		Name m_nmTagOfActorAtVFXLocation; //offset = 12, size = 8
	};

	class BioEpicPawnBehavior: public BioActorBehavior
	{
		DECLARE_PACKAGE_CLASS( BioEpicPawnBehavior, BioActorBehavior, SFXGame )

	public:

		Byte m_eCurrentActionState; //offset = 312, size = 1
		Byte m_ePreviousActionState; //offset = 313, size = 1
		Byte m_combatModeFadeoutState; //offset = 314, size = 1
		Byte m_eWeaponFireMode; //offset = 315, size = 1
		Bool m_bDoCameraBehaviorTransition: 1; //offset = 316, size = 4
		BioBaseSquad* Squad; //offset = 320, size = 4
		Int m_nALLEnabled; //offset = 324, size = 4
		Int m_nQueueEnabled; //offset = 328, size = 4
		Int m_nStackEnabled; //offset = 332, size = 4
		Int m_nWeaponsEnabled; //offset = 336, size = 4
		Int m_nGrenadesEnabled; //offset = 340, size = 4
		Int m_nPowersEnabled; //offset = 344, size = 4
		Int m_nCombatTransitionEnabled; //offset = 348, size = 4
		Class* m_attributesClass; //offset = 352, size = 4
		BioAttributesEpicPawn* m_PawnAttributes; //offset = 356, size = 4
		Array<BioCapability*> m_aoCapabilities; //offset = 360, size = 12
		Array<BioPower*> m_powers; //offset = 372, size = 12
		Int m_nCurrentPowerIndex; //offset = 384, size = 4
		Int m_nDoorProximityRefCount; //offset = 388, size = 4
		Array<EpicPawnVisualEffect> m_aVisualEffects; //offset = 392, size = 12

		Bool DisplayEpicPawnVisualEffect( Name nmLabel );
		void AdjustInventoryResource( Byte eResourceType, Int nAmt, Bool bNotifyTicker, BioPawn* oPlayerPawn, BioWorldInfo* oBWI );
		Int GetInventoryResource( Byte eResourceType, BioPawn* oPlayerPawn, BioWorldInfo* oBWI );
		Bool IsHealing();
		Int FindPowerIndex( Name nmPowerName );
		BioPower* FindPower( Name nmPowerName );
		Class* GetSaveObjectClass();
		BioBaseSaveObject* WriteSaveObject( Object* InOuter, BioBaseSaveObject* Save );
		Int GetDoorProximityRefCount();
		void ModifyDoorProximityRefCount( Bool bIncrement );
		Byte SetPreviousActionState();
		Byte SetActionState( Byte eState, Float fDelay );
		void TickPowers( Float DeltaTime );
		void ClearCurrentPower();
		Bool SetCurrentPower( Name nmPower, Float fCooldownRemaining );
		Bool IsAbilityEnabledCombatTransition();
		Bool IsAbilityEnabledPowers();
		Bool IsAbilityEnabledGrenades();
		Bool IsAbilityEnabledWeapons();
		Bool IsAbilityEnabledStack();
		Bool IsAbilityEnabledQueue();
		Bool IsAbilityEnabledAll();
		void DoDisabledEvent( Byte eEnableType, Name nmSubType );
		void DoEnabledEvent( Byte eEnableType, Name nmSubType );
		Bool IsAbilityEnabled_Power( Byte eEnableType, Name nmSubType );
		Int AbilityEnable_Power( Bool bEnable, Byte eEnableType, Name nmSubType );
		Bool IsAbilityEnabled_Offense( Byte eEnableType, Name nmSubType );
		Int AbilityEnable_Offense( Bool bEnable, Byte eEnableType, Name nmSubType );
		Bool IsAbilityEnabled_AI( Byte eEnableType, Name nmSubType );
		Int AbilityEnable_AI( Bool bEnable, Byte eEnableType, Name nmSubType );
		void InitializeActionFramework();
		void TickBehavior( Float DeltaTime );
	};

	const char* BIO_PAWN_ANIM_WALK_START_SPEED = 0.0;
	const char* BIO_PAWN_ANIM_RUN_RIGHT_FOOT_END = 0.7;
	const char* BIO_PAWN_ANIM_RUN_RIGHT_FOOT_START = 0.2;

	enum EBioAnimGetUpState
	{
		eBioAnimGetUp_Idle,
		eBioAnimGetUp_Start,
	};

	enum EBioAnimTurnDirState
	{
		eBioAnimTurn_NoTurn,
		eBioAnimTurn_ReqStartLeft,
		eBioAnimTurn_ReqStartRight,
		eBioAnimTurn_AckStartLeft,
	};

	enum EBioAnimStopState
	{
		eBioAnimStop_NoState,
		eBioAnimStop_StopLeftMove,
		eBioAnimStop_StopRightMove,
		eBioAnimStop_FinishLeftMove,
		eBioAnimStop_FinishRightMove,
		eBioAnimStop_InterruptLeftMove,
	};

	enum EBioAnimStartState
	{
		eBioAnimStart_NoState,
		eBioAnimStart_StartingMove,
		eBioAnimStart_FinishStartMove,
		eBioAnimStart_DoneStartMove,
	};

	enum EBioAnimCombatState
	{
		eBioAnimCombat_NoState,
		eBioAnimCombat_FireAuto,
		eBioAnimCombat_FireAutoStop,
		eBioAnimCombat_FireManual,
	};

	class BioPawnBehavior: public BioEpicPawnBehavior
	{
		DECLARE_PACKAGE_CLASS( BioPawnBehavior, BioEpicPawnBehavior, SFXGame )

	public:

		BioTalentContainer* m_Talents; //offset = 404, size = 4
		Weapon* SecondaryWeapon; //offset = 408, size = 4
		Byte m_eCombatState; //offset = 412, size = 1
		Byte m_eAnimStartState; //offset = 413, size = 1
		Byte m_eAnimSkidState; //offset = 414, size = 1
		Byte m_eAnimStopState; //offset = 415, size = 1
		Float m_fPowerUsePercent; //offset = 416, size = 4
		Bool m_bPowerUsePercentOverride: 1; //offset = 420, size = 4
		Bool m_bReadyForCombat: 1; //offset = 420, size = 4
		Bool m_bEnableStartAnim: 1; //offset = 420, size = 4
		Bool m_bEnableSkidAnim: 1; //offset = 420, size = 4
		Bool m_bEnableStopAnim: 1; //offset = 420, size = 4
		Bool m_bAllowStartAnimInCombat: 1; //offset = 420, size = 4
		Bool m_bAllowSkidAnimInCombat: 1; //offset = 420, size = 4
		Bool m_bAllowStopAnimInCombat: 1; //offset = 420, size = 4
		Bool m_bMeshAdjOn: 1; //offset = 420, size = 4
		Bool m_bUseManualMeshAdj: 1; //offset = 420, size = 4
		Bool m_bCanBePhysicsImpacted: 1; //offset = 420, size = 4
		Bool m_bCanBePhysicsImpactedOverride: 1; //offset = 420, size = 4
		Bool m_bIsFeigningDeath: 1; //offset = 420, size = 4
		Bool m_bCanUseDeathCapabilities: 1; //offset = 420, size = 4
		Byte m_eTurningDirection; //offset = 424, size = 1
		Byte m_eGetUpState; //offset = 425, size = 1
		Vector m_vFixedRotation; //offset = 428, size = 12
		Float m_fTurningAngle; //offset = 440, size = 4
		Float m_fAnimStartTime; //offset = 444, size = 4
		Float m_fMoveStartElapsedTime; //offset = 448, size = 4
		Float m_fMoveStopElapsedTime; //offset = 452, size = 4
		Float m_fAnimMoveSpeedSnapshot; //offset = 456, size = 4
		Float m_fAnimMoveStartSpeedSnapshot; //offset = 460, size = 4
		Float m_fCurPhysSettleDownTime; //offset = 464, size = 4
		Bool m_bInMatinee: 1; //offset = 468, size = 4
		Bool m_bDoneYawInterpolation: 1; //offset = 468, size = 4
		Bool m_bDoneSpeedInterpolation: 1; //offset = 468, size = 4
		Bool m_bArmorOverridden: 1; //offset = 468, size = 4
		Array<AnimSet*> m_aBackupAnimSets; //offset = 472, size = 12
		Float m_fInclineUpMod; //offset = 484, size = 4
		Float m_fInclineDownMod; //offset = 488, size = 4
		Float m_fSkidTurnThresh; //offset = 492, size = 4
		Float m_fPawnStopDecelTime; //offset = 496, size = 4
		Float m_fMeshAdjRate; //offset = 500, size = 4
		Float m_fManualMeshAdj; //offset = 504, size = 4
		Float m_fMeshAdjCheckFrequency; //offset = 508, size = 4
		Float m_fMeshAdjFarCheckFrequency; //offset = 512, size = 4
		Float m_fMeshAdjFarCheckDistance; //offset = 516, size = 4
		Float m_fMeshAdjTimeTillCheck; //offset = 520, size = 4
		Float m_fMeshAdjLastDistFound; //offset = 524, size = 4
		Actor* m_oMeshAdjLastBase; //offset = 528, size = 4
		Float PawnMoveStartTimerThreshold; //offset = 532, size = 4
		Float PawnMoveStopTimerThreshold; //offset = 536, size = 4
		Float m_fDesiredMaxSpeed; //offset = 540, size = 4
		Float m_fCurrentInclineMoveMod; //offset = 544, size = 4
		Rotator m_rLastStopRotation; //offset = 548, size = 12
		Rotator m_rSkidStartRotation; //offset = 560, size = 12
		Rotator m_rSkidTargetRotation; //offset = 572, size = 12
		Float m_fSkidDSDecelRate; //offset = 584, size = 4
		Float m_fMoveStopDSDecelRate; //offset = 588, size = 4
		Int PathFind_LastMovment_Mode; //offset = 592, size = 4
		Float STAT_boost_track; //offset = 596, size = 4
		Float STAT_Dist_track; //offset = 600, size = 4
		Array<Float> STAT_dist; //offset = 604, size = 12
		Array<Float> STAT_boost; //offset = 616, size = 12
		Array<Float> STAT_AITime; //offset = 628, size = 12
		Array<Int> STAT_PathFindMode; //offset = 640, size = 12
		Array<Float> STAT_PathFindModeTime; //offset = 652, size = 12
		Array<Name> STAT_FollowState; //offset = 664, size = 12
		Array<Int> STAT_GroundSpeed; //offset = 676, size = 12
		Int STAT_Samples; //offset = 688, size = 4
		Int STAT_ERRORS; //offset = 692, size = 4
		Int STAT_Teleports; //offset = 696, size = 4
		Int STAT_AbortedMoveTowards; //offset = 700, size = 4
		Float CAMHOOK_NORMAL_FRONTBACK; //offset = 704, size = 4
		Float CAMHOOK_NORMAL_RIGHTLEFT; //offset = 708, size = 4
		Float CAMHOOK_NORMAL_UPDOWN; //offset = 712, size = 4
		Float CAMHOOK_COLL_UPDOWN; //offset = 716, size = 4
		Float CAMHOOK_COLL_FRONTBACK; //offset = 720, size = 4
		Float CAMHOOK_COLL_RIGHTLEFT; //offset = 724, size = 4
		Float CAMHOOK_COMBAT_UPDOWN; //offset = 728, size = 4
		Float CAMHOOK_COMBAT_FRONTBACK; //offset = 732, size = 4
		Float CAMHOOK_COMBAT_RIGHTLEFT; //offset = 736, size = 4
		Float CAMHOOK_SNIPER_UPDOWN; //offset = 740, size = 4
		Float CAMHOOK_SNIPER_FRONTBACK; //offset = 744, size = 4
		Float CAMHOOK_SNIPER_RIGHTLEFT; //offset = 748, size = 4
		Float CAMHOOK_TACSEL_UPDOWN; //offset = 752, size = 4
		Float CAMHOOK_TACSEL_FRONTBACK; //offset = 756, size = 4
		Float CAMHOOK_TACSEL_RIGHTLEFT; //offset = 760, size = 4
		Name m_nmDebugKey; //offset = 764, size = 8
		Bio2DA* m_oExperience2DA; //offset = 772, size = 4
		Int m_nXP_Level_Cache; //offset = 776, size = 4
		Int m_nXP_Cache; //offset = 780, size = 4
		Int m_nRemainInRagdoll; //offset = 784, size = 4
		Float m_fDeathCapabilityActivationTime; //offset = 788, size = 4
		Float m_fVehicleExpScaleFactor; //offset = 792, size = 4

		ReturnValue GetActorTypeGameName();
		void TEMP_HolsterWeapon( BioPawn* P );
		void TEMP_DrawWeapon( BioPawn* P );
		Bool HasPowersOfType( Byte eDiscipline, Int nPowerIndex, BioPower* oPower );
		Float GetPowerUsePercent();
		Bool GetCanBePhysicsImpacted();
		Byte SetActionState( Byte eState, Float fDelay );
		Float GetDeathCapabilityActivationTime();
		void DecrementRagdollCount();
		void IncrementRagdollCount();
		void FeignDeathKismet( Bool B );
		void FeignDeath( Bool B, Bool bForceState );
		Class* GetSaveObjectClass();
		Int GetCharmSkill( SFXPowerLevelUpHelper* LevelUpHelper, BioWorldInfo* WorldInfo, SFXGame* Game, Float fCharmSkill, BioPawn* MyPawn, SFXPower_PassivePower* Power, SFXPower_PassivePower* BestPower, Int nBestPowerRank, Int nPowerRank, Int nIndex );
		Int GetIntimidateSkill( SFXPowerLevelUpHelper* LevelUpHelper, BioWorldInfo* WorldInfo, SFXGame* Game, Float fIntimidateSkill, BioPawn* MyPawn, SFXPower_PassivePower* Power, SFXPower_PassivePower* BestPower, Int nBestPowerRank, Int nPowerRank, Int nIndex );
		void ProcessMeshAdj( Float fDeltaTime );
		Bool InPlayerParty();
		Bool GetBioticAmpEquipped();
		Int GetClass();
		void AdjustMediGel( Int nAmt );
		Int GetMediGel();
		void AdjustCredits( Int nAmt, BioWorldInfo* oWorldInfo );
		Int GetCredits();
		Byte GetGender();
		void AdvanceTalkToCount( Int nAmt );
		void SetTalkToCount( Int nValue );
		Int GetTalkToCount();
		Int GetMarshalRank();
		void SetBackground_Notoritey( Int nValue );
		Int GetBackground_Notoritey();
		void SetBackground_Childhood( Int nValue );
		Int GetBackground_Childhood();
		Bool HasKey( Name Key );
		void AmplifyDamage( Float Damage );
		Int ComputeLevel();
		void ForceArmorOverride( Bool B );
		Bool IsArmorOverridden();
		void PostBeginPlay();
		void SoftResetMovementAndAnimationState();
		void HardResetActionAndAnimationState();
		void TickBehavior( Float DeltaTime );
		void FindFirstValidSecondaryAttribute( Bio2DA* table, Int nRankedLevel, Name ColumnName, Byte modType, BioGameProperty* oGameProperty );
		Bool FindFirstValidPrimaryFloatAttribute( Bio2DA* table, Int nRankedLevel, Name ColumnName, Float fValue );
		void InitializeActionFramework();
	};

	struct BioVehicleWeaponInfo
	{
		Int nTurretIndex; //offset = 0, size = 4
		Bool bClampToTurret: 1; //offset = 4, size = 4
		Float fTurretYawHalfAngleInDeg; //offset = 8, size = 4
		Float fTurretPitchHalfAngleInDeg; //offset = 12, size = 4
	};

	class BioVehicleBehaviorBase: public BioEpicPawnBehavior
	{
		DECLARE_PACKAGE_CLASS( BioVehicleBehaviorBase, BioEpicPawnBehavior, SFXGame )

	public:

		Bool m_bWeaponsEnabled: 1; //offset = 404, size = 4
		Bool m_bIncludeDriverSquad: 1; //offset = 404, size = 4
		Bool m_bUpRightEnabled: 1; //offset = 404, size = 4
		Bool m_bIsThrustersOn: 1; //offset = 404, size = 4
		Bool m_bPowertrainEnabled: 1; //offset = 404, size = 4
		Bool m_bVehicleFunctionEnabled: 1; //offset = 404, size = 4
		Bool m_bVehicleAudioEnable: 1; //offset = 404, size = 4
		Bool m_bInheritsPlayerStats: 1; //offset = 404, size = 4
		Array<BioVehicleWeaponInfo> m_aVehicleWeaponInfo; //offset = 408, size = 12
		Vector m_vRecoilImpulseAccumulator; //offset = 420, size = 12
		BioBaseSquad* m_oDriverSquad; //offset = 432, size = 4
		BioBaseSquad* m_oVehicleDefaultSquad; //offset = 436, size = 4
		Float m_fThrusterScalarFR; //offset = 440, size = 4
		Float m_fThrusterScalarFL; //offset = 444, size = 4
		Float m_fThrusterScalarBR; //offset = 448, size = 4
		Float m_fThrusterScalarBL; //offset = 452, size = 4
		Array<BioVisualEffect*> m_aThrusterVisualEffects; //offset = 456, size = 12
		BioVisualEffect* m_oDamageVisualEffect; //offset = 468, size = 4
		Bool m_bBrakesEnabled: 1; //offset = 472, size = 4
		Bool m_bIsPaused: 1; //offset = 472, size = 4
		Float m_fPreviousStopThreshold; //offset = 476, size = 4
		Int m_nLastDriverXPLevel; //offset = 480, size = 4
		Vector m_vForceExitLocation; //offset = 484, size = 12
		Int m_nCurrentZoomTurret; //offset = 496, size = 4
		Vector m_vPauseVelocity; //offset = 500, size = 12

		Class* GetSaveObjectClass();
		Bool StartUprighting(, SVehicle* oVehicle );
		void SetMaterialParameterState( Bool bState );
		Bool OnVehiclePause( Bool bPaused );
		Bool ScaleVehicleEquipment();
		Int GetRequiredEquipmentSophisticationLevel( Int nCurrentPlayerLevel );
		Name GetCameraHookName();
		Float GetCameraFollowDistance();
		Float GetCameraFollowHeight();
		Bool UpdateDamageModel();
		Bool InitializeSounds();
		void UpdateThrusterScalars( Float fXaxis, Float fYaxis );
		void DeactivateThruster( Int nIndex );
		void ActivateThruster( Int nIndex, Vector vMaxForce, Float fScale );
		void UpdateThrusters( Float fDeltaTime );
		Bool InitializeThrusters();
		void InitializeVehicleSquad();
		void SquadExit();
		void SquadEnter( BioBaseSquad* oEnterSquad );
		void OnDriverPartyDeath();
		Bool UpdateCurrentZoomTurret( Float fDeltaYaw, Float fDeltaPitch );
		Bool ExitZoomMode();
		Bool EnterZoomMode( Int nZoomTurretIndex );
		Bool IsWorldLocationWithinTurretCone( Int nTurretIndex, Vector vLocation );
		Rotator SetDesiredTurretAimPoint( Int nTurretIndex, Vector vTargetLocation );
		Bool InitializeVehicleWeapons();
		Bool InitializeVehicle();
		Bool OnVehicleExit();
		Bool OnVehicleEnter();
		void SetBrakeState( Bool bStatus );
		void SetVehicleFunctionState( Bool bStatus );
		void SetPowertrainState( Bool bStatus );
		Bool SetSuperMode( Byte nSuperMode, Bool bActivate, Bool bReturnToSuperMode );
		Bool ReleaseActive();
		void InitializePawnBehaviorForPlay();
		void InitializeActionFramework();
	};

	class BioVehicleBehaviorWheeled: public BioVehicleBehaviorBase
	{
		DECLARE_PACKAGE_CLASS( BioVehicleBehaviorWheeled, BioVehicleBehaviorBase, SFXGame )

	public:

		Int m_nVehicleCannon; //offset = 512, size = 4
		Int m_nVehicleMachineGun; //offset = 516, size = 4

		void InitializeActionFramework();
		Bool InitializeVehicle();
	};

	const char* CAMERA_PITCH_MAX_DEG = 65.;
	const char* BIO_CAMERA_UTILITY_COLLISION_POINT_COUNT = 8;

	class SFXCameraMode: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode, Object, SFXGame )

	public:

		Bool bIsCameraShakeEnabled: 1; //offset = 60, size = 4
		Bool bCollisionEnabled: 1; //offset = 60, size = 4
		Bool m_bUseCollisionSource: 1; //offset = 60, size = 4
		Vector Offset; //offset = 64, size = 12
		Vector HookOffset; //offset = 76, size = 12
		Name HookName; //offset = 88, size = 8
		Float FOV; //offset = 96, size = 4
		Name CameraName; //offset = 100, size = 8
		TPOV m_pov; //offset = 108, size = 28
		BioPlayerController* Owner; //offset = 136, size = 4
		SFXCameraInput* Input; //offset = 140, size = 4
		Float CollisionDistance; //offset = 144, size = 4
		Name LastCameraCollisionActor; //offset = 148, size = 8
		Bool m_bConstrainAspectRatio: 1; //offset = 156, size = 4
		Float m_fAspectRatio; //offset = 160, size = 4
		BioCameraDebugger* Debugger; //offset = 164, size = 4
		Vector m_vLockedCameraLocation; //offset = 168, size = 12
		Vector m_avLockedClipPlanePt[8]; //offset = 180, size = 12
		Vector m_vLockedHook; //offset = 276, size = 12
		Vector m_avLockedHookPlanePt[8]; //offset = 288, size = 12
		Vector m_vLockedNewCameraLocation; //offset = 384, size = 12
		Vector m_avLockedNewClipPlanePt[8]; //offset = 396, size = 12

		Vector GetActorCameraHook(, Bool bIsValid, Vector V );
		Vector GetCollisionCameraHook(, Bool bIsValid, Vector V );
		Bool CheckLoop( SFXCameraMode* M, Int RecurseLevel );
		void DrawHUD( BioCheatManager* M );
		Rotator GetCurrentShake(, BioActorBehavior* Behavior, Rotator CurrentShake );
		Bool IsCollisionEnabled();
		void Initialize( BioPlayerController* NewOwner );
		void OnUnPossess();
		void OnPossess( Pawn* NewPawn );
		void MakeInactive();
		void MakeActive();
		void AimAtPoint( Vector V, Vector PawnToPoint, Vector CameraPos, Vector CameraOrth, Vector CameraNorm, Vector Intersection, Vector Yaw, Float Opposite, Float Adjascent, Float Hypotenuse, Float CamNormOffset, Float YawDiff, Float PitchDiff );
		void Tick( Float fTimeDelta );
		Vector GetCameraLocation();
		void DrawHook( Vector V, Actor* Actor );
		void ModifyPostProcessSettings( PostProcessSettings PPSettings );
		void ComputeClipPlaneRect( Float fFov, Float fNearClipPlane, Float fWidth, Float fHeight );
		void DoCameraCollisionNative( Vector CollisionHook, Vector V, Rotator R, Actor* A );
		void DoCameraCollision( Vector V, Rotator R, Actor* A );
	};

	class BioCameraUtility: public SFXCameraMode
	{
		DECLARE_PACKAGE_CLASS( BioCameraUtility, SFXCameraMode, SFXGame )

	public:

		Float m_fCameraCollisionTestPointRange; //offset = 492, size = 4
	};

	class BioCameraBehavior: public BioCameraUtility
	{
		DECLARE_PACKAGE_CLASS( BioCameraBehavior, BioCameraUtility, SFXGame )

	public:

		void Tick( Float TimeDelta );
	};

	const char* DEFAULT_NEAR_CLIP_PLANE = 10.;
	const char* DEFAULT_CAMERA_FOV = 52.;

	class BioCameraBehaviorConversation: public BioCameraBehavior
	{
		DECLARE_PACKAGE_CLASS( BioCameraBehaviorConversation, BioCameraBehavior, SFXGame )

	public:

		Actor* ViewSource; //offset = 496, size = 4
		Actor* Target; //offset = 500, size = 4
		Vector m_vFixedCamPosition; //offset = 504, size = 12
		Rotator m_rFixedCamRotation; //offset = 516, size = 12
		Vector m_vProceduralCamPosition; //offset = 528, size = 12
		Rotator m_rProceduralCamRotation; //offset = 540, size = 12
		Float m_fNearPlane; //offset = 552, size = 4
		BioStageDOFData m_tDOFData; //offset = 556, size = 12
		Bool m_bDOFSettingDisabled: 1; //offset = 568, size = 4
		Float CAMERA_FOV; //offset = 572, size = 4
		Rotator m_rRotationOffset; //offset = 576, size = 12
		Float m_fLateralOffset; //offset = 588, size = 4
		Vector m_vPrevFixedCamPos; //offset = 592, size = 12
		Rotator m_rPrevFixedCamRot; //offset = 604, size = 12
		Float m_fPrevCamFOV; //offset = 616, size = 4
		Float m_fPrevNearPlane; //offset = 620, size = 4
		Bool m_bSavedData: 1; //offset = 624, size = 4
		Bool m_bIdleCamEnabled: 1; //offset = 624, size = 4
		BioStageDOFData m_tPrevDOFData; //offset = 628, size = 12
		AnimSet* m_pIdleCamAnimSet; //offset = 640, size = 4
		Float m_fIdleCamTimeIndex; //offset = 644, size = 4
		Int m_idleCamAnimIndex; //offset = 648, size = 4
		Class* pProceduralCamera; //offset = 652, size = 4
		Name m_nProceduralCameraClass; //offset = 656, size = 8

		void ModifyPostProcessSettings( PostProcessSettings PPSettings );
		void InternalModifyPostProcessSettings( PostProcessSettings PPSettings );
		void DrawHUD( BioCheatManager* M );
		void GetProceduralCam( Vector vCamLocation, Rotator rCamRotation, Bool bInvert, BioPawn* pBioCameraTarget, ActorInfo stActorInfo, CameraInfo stCameraInfo, Bio_Appr_Character* Appearance );
		void BlendIdleCameraAnimation();
		void InitProceduralCameraClass();
		void Reset();
		void MakeInactive();
		void Initialize( BioPlayerController* NewOwner );
		void ForcePOV();
		void ShutDown();
		void Tick( Float TimeDelta );
	};

	enum EBioGalaxyMapState
	{
		GalaxyMapState_None,
		GalaxyMapState_Galaxy,
		GalaxyMapState_Cluster,
		GalaxyMapState_System,
	};

	enum EBioGalaxyMap_PlanetType
	{
		eBioGM_PlanetType_None,
		eBioGM_PlanetType_Planet,
		eBioGM_PlanetType_Anomaly,
		eBioGM_PlanetType_PlanetAndAnomaly,
		eBioGM_PlanetType_Citadel,
	};

	struct SFXGalaxyMapSelector
	{
		SFXGalaxyMapObject* m_GalaxyMapObject; //offset = 0, size = 4
		Actor* m_actor; //offset = 4, size = 4
		m_Name m_Name; //offset = 8, size = 4
		Array<m_PlotNames> m_PlotNames; //offset = 12, size = 12
		Bool m_Visible: 1; //offset = 24, size = 4
		Int m_Visited; //offset = 28, size = 4
		Int m_State; //offset = 32, size = 4
	};

	struct BioMassRelayLine
	{
		Int m_nStartClusterIdx; //offset = 0, size = 4
		Int m_nEndClusterIdx; //offset = 4, size = 4
		String m_sStartClusterLabel; //offset = 8, size = 12
		String m_sEndClusterLabel; //offset = 20, size = 12
		Vector m_vLeftEndPosition; //offset = 32, size = 12
		Vector m_vRightEndPosition; //offset = 44, size = 12
		Vector m_vMiddlePosition; //offset = 56, size = 12
		Vector m_vDrawScale; //offset = 68, size = 12
		Rotator m_rOrientation; //offset = 80, size = 12
		Actor* m_pLeftEndActor; //offset = 92, size = 4
		Actor* m_pRighEndActor; //offset = 96, size = 4
		Actor* m_pMiddleActor; //offset = 100, size = 4
		Bool m_bIsGlowing: 1; //offset = 104, size = 4
	};

	class BioCameraBehaviorGalaxy: public BioCameraBehavior
	{
		DECLARE_PACKAGE_CLASS( BioCameraBehaviorGalaxy, BioCameraBehavior, SFXGame )

	public:

		SFXGalaxy* m_pGalaxyMap; //offset = 496, size = 4
		SFXCluster* m_pCurrentCluster; //offset = 500, size = 4
		SFXSystem* m_pCurrentSystem; //offset = 504, size = 4
		BioPlanet* m_pCurrentPlanet; //offset = 508, size = 4
		Float m_fMovementScalar; //offset = 512, size = 4
		Float m_fMovementScalarGalaxy; //offset = 516, size = 4
		Float m_fMovementScalarCluster; //offset = 520, size = 4
		Float m_fMovementScalarSystem; //offset = 524, size = 4
		Float m_fRotationScalar; //offset = 528, size = 4
		Vector m_vShipDesiredDirection; //offset = 532, size = 12
		Float m_fShipCurrentRotationSpeed; //offset = 544, size = 4
		Float m_fShipCurrentMovementSpeed; //offset = 548, size = 4
		Float m_fShipMinRotationSpeed; //offset = 552, size = 4
		Float m_fShipMaxRotationSpeed; //offset = 556, size = 4
		Float m_fShipControlDeadzone; //offset = 560, size = 4
		Float m_fShipSystemAccel; //offset = 564, size = 4
		Float m_fShipSystemDeccel; //offset = 568, size = 4
		Float m_fShipClusterAccel; //offset = 572, size = 4
		Float m_fShipClusterDeccel; //offset = 576, size = 4
		Int m_nCurrentState; //offset = 580, size = 4
		String m_sSelectableObject; //offset = 584, size = 12
		String m_sCenterObject; //offset = 596, size = 12
		String m_sCrossHairObject; //offset = 608, size = 12
		String m_sCameraObject; //offset = 620, size = 12
		Actor* m_pCenterObject; //offset = 632, size = 4
		Actor* m_pCrossHairObject; //offset = 636, size = 4
		Actor* m_pCameraObject; //offset = 640, size = 4
		Float m_fMaxOrbitDistance; //offset = 644, size = 4
		Float m_fPlanarPitch; //offset = 648, size = 4
		Actor* m_pLastSelectedObject; //offset = 652, size = 4
		Actor* m_pSelectedObject; //offset = 656, size = 4
		Actor* m_pSelectedCluster; //offset = 660, size = 4
		Actor* m_pSelectedSystem; //offset = 664, size = 4
		Actor* m_pSelectedPlanet; //offset = 668, size = 4
		Actor* m_pMassRelaySystem; //offset = 672, size = 4
		Actor* m_pFuelEllipseObject; //offset = 676, size = 4
		Actor* m_pMassRelayObject; //offset = 680, size = 4
		Actor* m_pRedMassRelayObject; //offset = 684, size = 4
		Actor* m_pDepotObject; //offset = 688, size = 4
		Float m_fZoomTime; //offset = 692, size = 4
		Vector m_vZoomLocation; //offset = 696, size = 12
		Vector m_vZoomDelta; //offset = 708, size = 12
		Rotator m_rZoomRotation; //offset = 720, size = 12
		Vector m_vLastCameraLocation; //offset = 732, size = 12
		Bool m_bTransitionDown: 1; //offset = 744, size = 4
		Bool m_bFirstStage: 1; //offset = 744, size = 4
		Bool m_bPlanetUsable: 1; //offset = 744, size = 4
		Bool m_bPlanetScanable: 1; //offset = 744, size = 4
		Bool m_bPaused: 1; //offset = 744, size = 4
		Bool m_bRefreshPlanetUsable: 1; //offset = 744, size = 4
		Bool m_bRebuildPlanetRingCache: 1; //offset = 744, size = 4
		Bool m_bSelectedPlanetLastFrame: 1; //offset = 744, size = 4
		Bool m_bUseInternalPlanetEvent: 1; //offset = 744, size = 4
		Bool m_bCanExploreCluster: 1; //offset = 744, size = 4
		Bool m_bSystemSunVisible: 1; //offset = 744, size = 4
		Int m_nPlanetDescription; //offset = 748, size = 4
		Int m_nMissionDescription; //offset = 752, size = 4
		Int m_nPlanetImageIndex; //offset = 756, size = 4
		Int m_nPlanetMap; //offset = 760, size = 4
		String m_sPlanetEvent; //offset = 764, size = 12
		Int m_nButtonLabel; //offset = 776, size = 4
		Int m_nExitMap; //offset = 780, size = 4
		Int m_nActiveWorld; //offset = 784, size = 4
		Int m_nScanRange; //offset = 788, size = 4
		Array<Actor*> m_pScaleformObjects; //offset = 792, size = 12
		Array<SFXGalaxyMapSelector> m_SystemSelectors; //offset = 804, size = 12
		Array<SFXGalaxyMapSelector> m_ClusterSelectors; //offset = 816, size = 12
		Array<SFXGalaxyMapSelector> m_GalaxySelectors; //offset = 828, size = 12
		Int m_nHighlightWorld; //offset = 840, size = 4
		DynamicSMActor* m_pTemplatePlanet; //offset = 844, size = 4
		Float m_fPlanetRotation; //offset = 848, size = 4
		Bio2DA* m_pClusterTable; //offset = 852, size = 4
		Bio2DA* m_pSystemTable; //offset = 856, size = 4
		Bio2DA* m_pPlanetTable; //offset = 860, size = 4
		Bio2DA* m_pMapTable; //offset = 864, size = 4
		Bio2DA* m_pPlotPlanetTable; //offset = 868, size = 4
		Bio2DA* m_pRelayTable; //offset = 872, size = 4
		Array<Actor*> m_pDynamicClusterPath; //offset = 876, size = 12
		Array<Actor*> m_pDynamicObjects; //offset = 888, size = 12
		Int m_nPlanetEventConditional; //offset = 900, size = 4
		Int m_nPlanetEventFunction; //offset = 904, size = 4
		Int m_nPlanetEventParameter; //offset = 908, size = 4
		Int m_nPlanetEventTransition; //offset = 912, size = 4
		Int m_nPlanetEventTransParameter; //offset = 916, size = 4
		m_srPlanetEventMessage m_srPlanetEventMessage; //offset = 920, size = 4
		ScreenShakeStruct ClusterTravelShake; //offset = 924, size = 112
		ForceFeedbackWaveform* ClusterTravelFF; //offset = 1036, size = 4
		Float ClusterTravelShakeTime; //offset = 1040, size = 4
		Float ClusterTravelFFTime; //offset = 1044, size = 4
		WwiseAudioComponent* m_pAudioComponent; //offset = 1048, size = 4
		WwiseBaseSoundObject* m_pErrorSound; //offset = 1052, size = 4
		WwiseBaseSoundObject* m_pBuyFuelSound; //offset = 1056, size = 4
		WwiseBaseSoundObject* m_pBuyFuelSoundStop; //offset = 1060, size = 4
		WwiseBaseSoundObject* m_pBuyFuelSound_Full; //offset = 1064, size = 4
		String m_sBuyFuelSound_PctFullRTPCName; //offset = 1068, size = 12
		WwiseBaseSoundObject* m_pBuyProbeSound; //offset = 1080, size = 4
		WwiseBaseSoundObject* m_pShipTravelSound_Start; //offset = 1084, size = 4
		WwiseBaseSoundObject* m_pShipTravelSound_Stop; //offset = 1088, size = 4
		String m_sShipTravelSound_SpeedRTPCName; //offset = 1092, size = 12
		String m_sShipTravelSound_ThrustRTPCName; //offset = 1104, size = 12
		String m_sShipTravelSound_FuelQtyRTPCName; //offset = 1116, size = 12
		String m_sShipTravelSound_SystemClusterRTPCName; //offset = 1128, size = 12
		WwiseBaseSoundObject* m_pShipOutOfFuel_Start; //offset = 1140, size = 4
		WwiseBaseSoundObject* m_pShipOutOfFuel_Stop; //offset = 1144, size = 4
		Float m_fLastNoFuelMessageTime; //offset = 1148, size = 4
		Array<WwiseBaseSoundObject*> m_pShipHalfFuelVO; //offset = 1152, size = 12
		Array<WwiseBaseSoundObject*> m_pShipNoFuelClusterVO; //offset = 1164, size = 12
		Array<WwiseBaseSoundObject*> m_pShipNoFuelClusterReturnVO; //offset = 1176, size = 12
		Array<WwiseBaseSoundObject*> m_pShipNoFuelSystemVO; //offset = 1188, size = 12

		Bool TriggerEvent( Name sEvent, Name nParameter );
		Vector GetCameraLocation();
		void SetExplorationAchievementCompleted( BioPlayerController* oController );
		void UpdateClusterTravelEffects( Float TimeDelta );
		void OutOfFuelPenalty( Float fDistToDepot, BioPlayerController* oController, SFXInventoryManager* oInventory, Byte eLostMineral, Byte eTestMineral, Int nPenalty, Int nCount, Int nLargestAmt, Int nTestAmt );
		void BurnFuel( Float fFuel, BioPlayerController* oController, SFXInventoryManager* oInventory );
		Float GetFuelEfficiency(, BioPlayerController* oController, SFXInventoryManager* oInventory );
		Float GetMaxFuel(, BioPlayerController* oController, SFXInventoryManager* oInventory );
		Float GetRemainingFuel(, BioPlayerController* oController, SFXInventoryManager* oInventory );
		Int GetNumCredits(, BioPlayerController* oController, SFXInventoryManager* oInventory );
		Float GetMaxProbes(, BioPlayerController* oController, SFXInventoryManager* oInventory );
		Int GetRemainingProbes(, BioPlayerController* oController, SFXInventoryManager* oInventory );
		void HandleRevealLandingSite();
		Bool HandleSelectPlanet();
		void Tick( Float TimeDelta );
	};

	class BioCameraBehaviorLocked: public BioCameraBehavior
	{
		DECLARE_PACKAGE_CLASS( BioCameraBehaviorLocked, BioCameraBehavior, SFXGame )

	public:

		void Initialize( BioPlayerController* NewOwner );
	};

	class BioCameraBehaviorSpectator: public BioCameraBehavior
	{
		DECLARE_PACKAGE_CLASS( BioCameraBehaviorSpectator, BioCameraBehavior, SFXGame )

	public:

		Float m_fLockRange; //offset = 496, size = 4
		Float m_fLockHeight; //offset = 500, size = 4
		Float m_fLockPitch; //offset = 504, size = 4
		Float m_fLockYaw; //offset = 508, size = 4
		Bool m_bSuppliedLocalizedParams: 1; //offset = 512, size = 4
		Actor* ViewSource; //offset = 516, size = 4
		Actor* Target; //offset = 520, size = 4
		Array<PlayerStart*> m_aSpectateSpawnLocation; //offset = 524, size = 12
		Int m_nSpectateCurrentLocation; //offset = 536, size = 4

		void Tick( Float TimeDelta );
		void SetTarget( Actor* NewTarget, Vector vDir, Rotator rDir );
		void MakeInactive();
		void Reset();
		void SetTargetLocalizedCameraParams( Vector vPosition, Rotator rRotation, Rotator rLockRotation );
		void GetTargetLocalizedCameraParams( Vector vPosition, Rotator rRotation, Rotator rLockRotation );
	};

	enum EBioCameraDebuggerFlag
	{
		BIO_CAMERA_DEBUGGER_FLAG_ACTIVE,
		BIO_CAMERA_DEBUGGER_FLAG_COLLISION_LOCK,
	};

	class BioCameraDebugger: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCameraDebugger, Object, SFXGame )

	public:

		Int m_anFlag[3]; //offset = 60, size = 4

		Bool GetFlag( Byte eFlag );
		void SetFlag( Byte eFlag, Bool B );
	};

	class BioCameraManager: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioCameraManager, Actor, SFXGame )

	public:
	};

	struct BioZoomMagnificationConfig
	{
		Float m_fCamSpeedFactor; //offset = 0, size = 4
		Float m_fFOVFactor; //offset = 4, size = 4
		Int m_nLevelCount; //offset = 8, size = 4
		Float m_fTransitionDuration; //offset = 12, size = 4
	};

	struct BioZoomFocusConfig
	{
		Float m_fMaxFocusDistance; //offset = 0, size = 4
		Float m_fNearClipFactor; //offset = 4, size = 4
		Float m_fNearClipMax; //offset = 8, size = 4
		Float m_fMinRate; //offset = 12, size = 4
		Float m_fDuration; //offset = 16, size = 4
		Float m_fInnerRadiusFactor; //offset = 20, size = 4
		Float m_fFalloffExponent; //offset = 24, size = 4
		Float m_fBlurKernelSize; //offset = 28, size = 4
		Float m_fMaxNearBlurAmount; //offset = 32, size = 4
		Float m_fMaxFarBlurAmount; //offset = 36, size = 4
		Color m_clrModulateBlur; //offset = 40, size = 4
	};

	class BioCameraZoom: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCameraZoom, Object, SFXGame )

	public:

		BioZoomFocusConfig m_focusConfig; //offset = 60, size = 44
		BioZoomMagnificationConfig m_magnificationConfig; //offset = 104, size = 16
		Int m_nCurrentMagnificationLevel; //offset = 120, size = 4
		Float m_fFOVTarget; //offset = 124, size = 4
		Float m_fFOVRate; //offset = 128, size = 4
		Float m_fFOVMin; //offset = 132, size = 4
		Float m_fFOVMax; //offset = 136, size = 4
		Float m_fCamStickScalarTarget; //offset = 140, size = 4
		Float m_fCamStickScalarRate; //offset = 144, size = 4
		Float m_fCamStickScalarMin; //offset = 148, size = 4
		Float m_fFocusDistance; //offset = 152, size = 4
		Float m_fFocusDistanceTarget; //offset = 156, size = 4

		void ModifyPostProcessSettings( PostProcessSettings PPSettings );
		void Tick( Float TimeDelta, Float FOV, Float CamStickScalar );
		Int GetCurrentMagnificationLevel();
		void Focus( Float fDistance, BioWorldInfo* pWorldInfo );
	};

	class SFXCameraInput: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXCameraInput, Object, SFXGame )

	public:

		Bool m_bUseExplorationSensitivity: 1; //offset = 60, size = 4
		Float TimeToReachFullSpeed; //offset = 64, size = 4
		Float MaxCameraRotationSpeed; //offset = 68, size = 4
		Float StickDeadZone; //offset = 72, size = 4
		Vector2D CameraSensitivity; //offset = 76, size = 8
	};

	enum EShakeParam
	{
		ESP_OffsetRandom,
		ESP_OffsetZero,
	};

	struct ShakeParams
	{
		Byte X; //offset = 0, size = 1
		Byte Y; //offset = 1, size = 1
		Byte Z; //offset = 2, size = 1
		Byte Padding; //offset = 3, size = 1
	};

	struct ScreenShakeStruct
	{
		Float TimeToGo; //offset = 0, size = 4
		Float TimeDuration; //offset = 4, size = 4
		Vector RotAmplitude; //offset = 8, size = 12
		Vector RotFrequency; //offset = 20, size = 12
		Vector RotSinOffset; //offset = 32, size = 12
		ShakeParams RotParam; //offset = 44, size = 4
		Vector LocAmplitude; //offset = 48, size = 12
		Vector LocFrequency; //offset = 60, size = 12
		Vector LocSinOffset; //offset = 72, size = 12
		ShakeParams LocParam; //offset = 84, size = 4
		Float FOVAmplitude; //offset = 88, size = 4
		Float FOVFrequency; //offset = 92, size = 4
		Float FOVSinOffset; //offset = 96, size = 4
		Byte FOVParam; //offset = 100, size = 1
		Name ShakeName; //offset = 104, size = 8
	};

	class SFXCameraModifier_ScreenShake: public CameraModifier
	{
		DECLARE_PACKAGE_CLASS( SFXCameraModifier_ScreenShake, CameraModifier, SFXGame )

	public:

		Array<ScreenShakeStruct> Shakes; //offset = 68, size = 12
		ScreenShakeStruct TestShake; //offset = 80, size = 112

		Bool ModifyCamera( Camera* Camera, Float DeltaTime, TPOV OutPOV, Int I, ScreenShakeStruct CurrentScreenShake );
		void UpdateScreenShake( Float DeltaTime, ScreenShakeStruct Shake, TPOV OutPOV );
		void StartNewShake( Float Duration, Vector newRotAmplitude, Vector newRotFrequency, Vector newLocAmplitude, Vector newLocFrequency, Float newFOVAmplitude, Float newFOVFrequency, ScreenShakeStruct NewShake );
		ScreenShakeStruct ComposeNewShake( Float Duration, Vector newRotAmplitude, Vector newRotFrequency, Vector newLocAmplitude, Vector newLocFrequency, Float newFOVAmplitude, Float newFOVFrequency, ScreenShakeStruct NewShake );
		Float InitializeOffset( Byte Param );
		ScreenShakeStruct InitializeShake( ScreenShakeStruct NewShake );
		void AddScreenShake( ScreenShakeStruct NewShake, Int ShakeIdx, Int NumShakes );
		void RemoveScreenShake( Name ShakeName, Int idx );
		void RemoveAllScreenShakes();
	};

	struct SFXCameraNativeBaseTraceInfo
	{
		Vector m_vCollVectorLocation; //offset = 0, size = 12
		Vector m_vCollVectorNormal; //offset = 12, size = 12
		Actor* m_oCollVectorActor; //offset = 24, size = 4
		Bool m_bCollDetected: 1; //offset = 28, size = 4
		Bool m_bCollisionDirty: 1; //offset = 28, size = 4
		Bool m_bDebugDraw: 1; //offset = 28, size = 4
		Color m_clrDebugDraw; //offset = 32, size = 4
	};

	class SFXCameraNativeBase: public AnimatedCamera
	{
		DECLARE_PACKAGE_CLASS( SFXCameraNativeBase, AnimatedCamera, SFXGame )

	public:

		Bool bDisabled: 1; //offset = 964, size = 4
		Bool bFreeCamActive: 1; //offset = 964, size = 4
		SFXCameraMode_Interpolate* SlideTransition; //offset = 968, size = 4
		SFXCameraMode_Interpolate* InstantTransition; //offset = 972, size = 4
		Array<SFXCameraMode*> CameraModes; //offset = 976, size = 12
		SFXCameraMode* CurrentCameraMode; //offset = 988, size = 4
		SFXCameraMode* LastGoodMode; //offset = 992, size = 4
		Bool m_bIgnoreSlowMo: 1; //offset = 996, size = 4
		Bool m_bCameraSwitchEnabled: 1; //offset = 996, size = 4
		Vector2D CameraStick; //offset = 1000, size = 8
		Vector2D MovementStick; //offset = 1008, size = 8
		Rotator AdditiveRotation; //offset = 1016, size = 12
		Rotator SubtractiveRotation; //offset = 1028, size = 12
		Float AspectRatio; //offset = 1040, size = 4
		SFXCameraNativeBaseTraceInfo m_aTraceInfo; //offset = 1044, size = 36

		void AddScreenShake( ScreenShakeStruct Shake );
		void CreateIPECommands( BioInGamePropertyEditor* IPE, BioPropertyEditorBaseNode* Parent, BioPropertyEditorPropertyNode* oControlNode, SFXCameraMode* Mode );
		void OnUnPossess();
		void OnPossess( Pawn* pPawn );
		Actor* LineCheck( TraceHitInfo HitInfo, Vector HitLocation, Vector HitNormal, Vector TraceEnd, Bool TraceActors, Vector Extent, Int ExtraTraceFlags );
		void ResetHiddenActors();
		void TraceCamera();
		Vector WorldToScreenSnapToEdge( Vector vWorldLoc, Float i_fSafeZoneX, Float i_fSafeZoneY );
		Vector WorldToCanonicalScreen( Vector vWorldLoc );
		Bool GetTrace( Actor* oHit, Vector vLocation, Vector vNormal );
	};

	class BioActivityTiming: public Object
	{
		DECLARE_PACKAGE_CLASS( BioActivityTiming, Object, SFXGame )

	public:

		Name ActivityName; //offset = 60, size = 8
		Float ActivityTime; //offset = 68, size = 4
	};

	struct ActivityRecord
	{
		Name m_nmActivityName; //offset = 0, size = 8
		Array<AnimSet*> m_oMaleAnimations; //offset = 8, size = 12
		Array<AnimSet*> m_oFemaleAnimations; //offset = 20, size = 12
		SoundCue* m_oActivitySoundCue; //offset = 32, size = 4
		Array<Float> m_faActivityTwitchWeighting; //offset = 36, size = 12
	};

	class BioWorldInteractionType: public Object
	{
		DECLARE_PACKAGE_CLASS( BioWorldInteractionType, Object, SFXGame )

	public:

		Array<AnimSet*> m_oBaseMaleAnimations; //offset = 60, size = 12
		Array<AnimSet*> m_oBaseFemaleAnimations; //offset = 72, size = 12
		SoundCue* m_oBaseSoundCue; //offset = 84, size = 4
		Array<ActivityRecord> m_ActivityRecords; //offset = 88, size = 12
		Float m_fBaseTime; //offset = 100, size = 4
		Float m_fVarianceTime; //offset = 104, size = 4
		Int m_nCurrentActivity; //offset = 108, size = 4
		Int m_nCurrentTwitch; //offset = 112, size = 4
		AudioComponent* m_oBaseSounds; //offset = 116, size = 4
		AudioComponent* m_oActivitySounds; //offset = 120, size = 4
	};

	class BioArtPlaceable: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceable, Actor, SFXGame )

	public:

		BioArtPlaceableBehavior* m_oBehavior; //offset = 508, size = 4
		AudioComponent* PlacablesSounds; //offset = 512, size = 4
		MeshComponent* DestroyedMesh; //offset = 516, size = 4
		MeshComponent* PlaceableMesh; //offset = 520, size = 4
		Int m_nNumParticipants; //offset = 524, size = 4
		BioFSMComponent* FSM; //offset = 528, size = 4
		BioPawn* m_oLastInstigator; //offset = 532, size = 4
		Array<BioVisualEffect*> VisualEffects; //offset = 536, size = 12
		LightEnvironmentComponent* m_pLightEnvComponent; //offset = 548, size = 4
		Map_Mirror m_mAttachedNavPoints; //offset = 552, size = 20
		Name m_nmMatineeNodeName; //offset = 572, size = 8
		MultiMap_Mirror m_maoBlockedReachSpecs; //offset = 580, size = 20
		Float m_fCorpseCleanupFirstAttemptTime; //offset = 600, size = 4
		Float m_fCorpseCleanupAttemptRetryTime; //offset = 604, size = 4
		Int m_nMaxCorpseVisibilityCleanupAttempts; //offset = 608, size = 4
		Float m_fMaxCorpseCleanupDistanceThreshold; //offset = 612, size = 4
		Float m_fMaxCorpseCleanupScreenSizeThreshold; //offset = 616, size = 4
		Int m_nCorpseCleanupAttempts; //offset = 620, size = 4
		Bool m_bCanCleanupCorpse: 1; //offset = 624, size = 4
		Bool bIsFrozen: 1; //offset = 624, size = 4
		BioArtPlaceable* NextPlaceable; //offset = 628, size = 4

		void ReactToDeath( Float Damage, Float fDeathDamage, Controller* InstigatedBy, Vector HitLocation, Vector Momentum, Class* clsDamageType, TraceHitInfo HitInfo, SFXDamageType* pDamage );
		void DestroyedCleanupTimer( Bool bCleanUpCorpse, Float DistFromCameraSquared, BioWorldInfo* pWorldInfo, SkeletalMeshComponent* SkelMesh );
		void FinishAnimControl();
		void SetAnimWeights( Array<AnimSlotInfo> SlotInfos );
		void SetAnimPosition( Name SlotName, Int ChannelIndex, Name InAnimSeqName, Float InPosition, Bool bFireNotifies, Bool bLooping );
		void BeginAnimControl( Array<AnimSet*> InAnimSets );
		Class* GetSaveObjectClass();
		void OnSkillGameCanceled( BioPawn* oUsingPawn, Int nIndex );
		void OnSkillGameSucceeded( BioPawn* oUsingPawn, Int nIndex );
		void OnSkillGameFailed( BioPawn* oUsingPawn, Int nIndex );
		void AbortReactive( Name nmToState, Int nIndex, BioReactive* oReactive, BioReactiveUseArtPlaceable* oUseArtPlaceable );
		void RanInto( Actor* Other );
		Bool IsDestroyed(, BioArtPlaceableType* PlaceableType );
		void OnCastAt( Pawn* oAttacker, SFXPower* Power, BioSeqEvt_OnCastAt* Event, Int I );
		void OnAttacked( Pawn* oAttacker, Name WeaponName, BioSeqEvt_OnAttacked* Event, Int I );
		void CreateSelection( Bool bTargetable, Bool bCombatTargetable, SFXSelectionModule* SelMod, BioActorType* MyActorType );
		void PostBeginPlay();
		void UnfreezeAnimation();
		void FreezeAnimation();
		void MAT_FinishAnimControl();
		void MAT_SetAnimWeights( Array<AnimSlotInfo> SlotInfos );
		void MAT_SetAnimPosition( Name SlotName, Int ChannelIndex, Name InAnimSeqName, Float InPosition, Bool bFireNotifies, Bool bLooping );
		void MAT_BeginAnimControl( Array<AnimSet*> InAnimSets );
		void OverrideUseCase( Byte UseCase );
		void AddProximityTimer();
		Bool BioDoProximityCheck();
		void TermRagdoll();
		void InitRagdoll();
		void UpdateWpPointPosition();
		void SetActionStationWP( NavigationPoint* oWP, Name nmSocket );
	};

	class BioContainer: public BioArtPlaceable
	{
		DECLARE_PACKAGE_CLASS( BioContainer, BioArtPlaceable, SFXGame )

	public:
	};

	class BioDoor: public BioArtPlaceable
	{
		DECLARE_PACKAGE_CLASS( BioDoor, BioArtPlaceable, SFXGame )

	public:

		Float m_fFarCloseDistance; //offset = 632, size = 4
		Pawn* m_oPlayerWithinDoorProximity; //offset = 636, size = 4
		Bool m_bSaveStateWhenPlayerEntered: 1; //offset = 640, size = 4

		Float CalcDistanceFromDoorPlane( Vector vWorldLocation );
		Bool BioDoProximityCheck();
	};

	struct BioProjectilePhysicsCollisionContext
	{
		Actor* m_oActor; //offset = 0, size = 4
		Vector m_vHitLocation; //offset = 4, size = 12
		Vector m_vHitNormal; //offset = 16, size = 12
	};

	class BioProjectile: public Projectile
	{
		DECLARE_PACKAGE_CLASS( BioProjectile, Projectile, SFXGame )

	public:
		struct CollidedDueToPhysics
		{
		};

		struct Standard
		{
		};


		Bool m_bEnablePhysicsTouch: 1; //offset = 568, size = 4
		BioProjectilePhysicsCollisionContext m_oPhysicsCollisionContext; //offset = 572, size = 28

		void ProcessPhysicsTouch( Actor* oOther, Vector vHitLocation, Vector vHitNormal );
		void ProcessTouch( Actor* oOther, Vector vHitLocation, Vector vHitNormal, TraceHitInfo HitInfo, Actor* pDamageCausingActor_Owner );
		void Explode( Vector vHitLocation, Vector vHitNormal, Actor* pIgnoredActor_None, Controller* pInstigatorController, Bool bDoFullDamage_FALSE );
		Bool IsValidTarget( Actor* oActor );
	};

	class BioMapNote: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioMapNote, Actor, SFXGame )

	public:

		Bool m_bReducedVisibility: 1; //offset = 508, size = 4
		Bool m_bShowOnRadar: 1; //offset = 508, size = 4
		Bool m_bShowOnAreamap: 1; //offset = 508, size = 4
		Bool m_bLinkedToJournal: 1; //offset = 508, size = 4
		Bool m_bRenderInWorld: 1; //offset = 508, size = 4
		Float m_fVisibleRange; //offset = 512, size = 4
		GFxMovieInfo* m_oAreaMap; //offset = 516, size = 4
		m_sMapNoteName m_sMapNoteName; //offset = 520, size = 4
		Int m_nLinkedQuest; //offset = 524, size = 4
		m_sJournalTask m_sJournalTask; //offset = 528, size = 4
		Byte Region; //offset = 532, size = 1
		Byte Plot; //offset = 533, size = 1
		Byte Conditional; //offset = 534, size = 1
		Int Argument; //offset = 536, size = 4
		Int m_nIndex; //offset = 540, size = 4
		String m_sVarName; //offset = 544, size = 12
		Int m_nPrevRegionIndex; //offset = 556, size = 4
		Int m_nPrevPlotIndex; //offset = 560, size = 4
		String m_sRefName; //offset = 564, size = 12
		Float m_fUpdateDelay; //offset = 576, size = 4
		Float m_fUpdateTimer; //offset = 580, size = 4
		Bool m_bSeen: 1; //offset = 584, size = 4
		Bool m_bRenderInWorld_LastTick: 1; //offset = 584, size = 4

		Bool ShowMapNote( Bool bAreaMap );
	};

	class BioPathPoint: public NavigationPoint
	{
		DECLARE_PACKAGE_CLASS( BioPathPoint, NavigationPoint, SFXGame )

	public:

		Bool bEnabled: 1; //offset = 776, size = 4
		Bool bOrientPawnOnEvent: 1; //offset = 776, size = 4
		Bool bAlwaysReachable: 1; //offset = 776, size = 4

		Bool DoReachedWaypointEvent( BioPawn* oPawn, Int I, Bool bPause );
		Bool OnCreatureReachedWayPoint( Pawn* PathFindingCreature );
	};

	class BioWaypointLinesComponent: public PrimitiveComponent
	{
		DECLARE_PACKAGE_CLASS( BioWaypointLinesComponent, PrimitiveComponent, SFXGame )

	public:
	};

	class BioWaypointSet: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioWaypointSet, Actor, SFXGame )

	public:

		Bool AlwaysShow: 1; //offset = 508, size = 4
		Array<NavReference> WaypointReferences; //offset = 512, size = 12

		NavigationPoint* GetWaypoint( Int nIdx );
		Int FindNearestPoint( Vector vLoc );
	};

	enum ePoses
	{
		Sit,
		Crouch,
	};

	class BioWp_ActionStation: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_ActionStation, BioPathPoint, SFXGame )

	public:

		Vector m_vOldPositon; //offset = 780, size = 12
		Bool m_bPositionLocked: 1; //offset = 792, size = 4
		BioStage* m_oStage; //offset = 796, size = 4
		Name m_nmStagePosition; //offset = 800, size = 8

		Bool OnCreatureReachedWayPoint( Pawn* PathFindingCreature );
	};

	class BioWP_AirPoint: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWP_AirPoint, BioPathPoint, SFXGame )

	public:
	};

	class BioWp_DoorMarker: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_DoorMarker, BioPathPoint, SFXGame )

	public:

		BioDoor* oMyDoor; //offset = 780, size = 4
		Bool bWaitUntilCompletelyOpened: 1; //offset = 784, size = 4
		Bool bAICanOpenDoor: 1; //offset = 784, size = 4
		Bool bTempDisabledCollision: 1; //offset = 784, size = 4
		Array<Name> m_nmClosedStates; //offset = 788, size = 12
		Array<Name> m_nmOpenedStates; //offset = 800, size = 12
		Name m_nmGotoStateToOpen; //offset = 812, size = 8

		Bool SuggestMovePreparation( Pawn* Other );
		Bool ProceedWithMove( Pawn* Other );
		Actor* SpecialHandling( Pawn* Other );
		Bool IsDoorClosed();
		Bool IsDoorOpen();
	};

	enum EBioAttrModType
	{
		BIO_ATTR_MOD_SUM,
		BIO_ATTR_MOD_FRACTIONAL,
		BIO_ATTR_MOD_LAYER,
	};

	struct BioComplexFloatStructAttribute
	{
		Float m_Base; //offset = 0, size = 4
		Float m_modifiers[4]; //offset = 4, size = 4
		Bool m_isBaseOverrideInEffect: 1; //offset = 20, size = 4
		Array<Float> m_baseOverrides; //offset = 24, size = 12
		Array<Bool> m_isBaseOverrideValid; //offset = 36, size = 12
		Float m_Current; //offset = 48, size = 4
		Bool m_Dirty: 1; //offset = 52, size = 4
		Float m_Max; //offset = 56, size = 4
		Float m_Min; //offset = 60, size = 4
		Int m_isModifierEnabled[4]; //offset = 64, size = 4
		Pointer m_Parent; //offset = 80, size = 4
		Bio2DA* m_LookupTable; //offset = 84, size = 4
		Int m_TableColumn; //offset = 88, size = 4
	};

	struct BioComplexIntStructAttribute
	{
		Int m_Base; //offset = 0, size = 4
		Int m_modifiers[4]; //offset = 4, size = 4
		Bool m_isBaseOverrideInEffect: 1; //offset = 20, size = 4
		Array<Int> m_baseOverrides; //offset = 24, size = 12
		Array<Bool> m_isBaseOverrideValid; //offset = 36, size = 12
		Int m_Current; //offset = 48, size = 4
		Bool m_Dirty: 1; //offset = 52, size = 4
		Int m_Max; //offset = 56, size = 4
		Int m_Min; //offset = 60, size = 4
		Int m_isModifierEnabled[4]; //offset = 64, size = 4
		Pointer m_Parent; //offset = 80, size = 4
		Bio2DA* m_LookupTable; //offset = 84, size = 4
		Int m_TableColumn; //offset = 88, size = 4
		Array<Pointer> m_Children; //offset = 92, size = 12
		Array<Pointer> m_FloatChildren; //offset = 104, size = 12
	};

	class BioAttributes: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioAttributes, BioBaseComponent, SFXGame )

	public:

		Bool m_bIsInitialized: 1; //offset = 68, size = 4

		String IntToString( BioComplexIntStructAttribute attribute );
		Int GetBaseIntValue( BioComplexIntStructAttribute attribute );
		void SetBaseIntValue( BioComplexIntStructAttribute attribute, Int baseValue );
		Int GetCurrentIntValue( BioComplexIntStructAttribute attribute );
		String FloatToString( BioComplexFloatStructAttribute attribute );
		Float GetBaseFloatValue( BioComplexFloatStructAttribute attribute );
		void SetBaseFloatValue( BioComplexFloatStructAttribute attribute, Float baseValue );
		Float GetCurrentFloatValue( BioComplexFloatStructAttribute attribute );
		void ClearStringAttribute( Name nmAttribute, Int nIndexOfAttributeInArray );
		void RemoveFloatAttributeBaseOverrideModifier( Name attribute, Int nIndexOfOverride, Int nIndexOfAttributeInArray );
		void RemoveIntAttributeBaseOverrideModifier( Name attribute, Int nIndexOfOverride, Int nIndexOfAttributeInArray );
		void RemoveFloatAttributeModifier( Name attribute, Byte modType, Float fValue, Int nIndexOfAttributeInArray );
		void RemoveIntAttributeModifier( Name attribute, Byte modType, Int nValue, Int nIndexOfAttributeInArray );
		Int AddFloatAttributeBaseOverrideModifier( Name attribute, Float Value, Int nIndexOfAttributeInArray );
		Int AddIntAttributeBaseOverrideModifier( Name attribute, Int Value, Int nIndexOfAttributeInArray );
		void AddFloatAttributeModifier( Name attribute, Byte modType, Float fValue, Int nIndexOfAttributeInArray );
		void AddIntAttributeModifier( Name attribute, Byte modType, Int nValue, Int nIndexOfAttributeInArray );
		void SetNameAttribute( Name attribute, Name nmValue, Int nIndexOfAttributeInArray );
		void SetBoolAttribute( Name attribute, Bool bValue, Int nIndexOfAttributeInArray );
		void SetEnumAttribute( Name nmAttributeName, String sValue, Int nIndexOfAttributeInArray );
		void SetStringAttribute( Name attribute, String sValue, Int nIndexOfAttributeInArray );
		void SetByteAttribute( Name attribute, Byte cValue, Int nIndexOfAttributeInArray );
		void SetFloatAttribute( Name attribute, Float fValue, Int nIndexOfAttributeInArray );
		void SetIntAttribute( Name attribute, Int nValue, Int nIndexOfAttributeInArray );
		void EnsureInitialized();
	};

	enum EBioGameEffectAttributeType
	{
		BIO_ATTRIBUTE_TYPE_PAWN,
		BIO_ATTRIBUTE_TYPE_PAWNPARTY,
		BIO_ATTRIBUTE_TYPE_PAWNPLAYER,
	};

	class BioAttributeMapper: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAttributeMapper, Object, SFXGame )

	public:

		Name m_powerName; //offset = 60, size = 8

		BioAttributes* GetAttributes( Object* oSrc, Byte eType );
	};

	enum EBioAttributesDamageFalloff
	{
		BIO_ATTRIBUTES_DAMAGE_FALLOFF_LINEAR,
		BIO_ATTRIBUTES_DAMAGE_FALLOFF_NONE,
	};

	class BioAttributesDamage: public BioAttributes
	{
		DECLARE_PACKAGE_CLASS( BioAttributesDamage, BioAttributes, SFXGame )

	public:

		Bool m_bHasImpulseOnDeath: 1; //offset = 72, size = 4
		Bool m_bHasImpulse: 1; //offset = 72, size = 4
		Bool m_bIgnorePhysicsThreshold: 1; //offset = 72, size = 4
		Bool m_bDamagesHealth: 1; //offset = 72, size = 4
		Bool m_bSuppressDeathCapabilities: 1; //offset = 72, size = 4
		Byte m_eExplosionFalloff; //offset = 76, size = 1
	};

	class BioAttributesDamageComponent: public BioAttributes
	{
		DECLARE_PACKAGE_CLASS( BioAttributesDamageComponent, BioAttributes, SFXGame )

	public:

		Float m_HealthCurrent; //offset = 72, size = 4
		BioComplexFloatStructAttribute m_HealthMax; //offset = 76, size = 92
		BioComplexFloatStructAttribute m_HealthRegenRate; //offset = 168, size = 92
		Float m_fHealthOverride; //offset = 260, size = 4
		Float m_initialHealthRegenRate; //offset = 264, size = 4
		Bool m_HealthAffectedByImmunity: 1; //offset = 268, size = 4
		Bool m_ShieldsAffectedByShieldIncrease: 1; //offset = 268, size = 4

		void RemoveFloatAttributeBaseOverrideModifier( Name attribute, Int nIndexOfOverride, Int nIndexOfAttributeInArray );
		Int AddFloatAttributeBaseOverrideModifier( Name attribute, Float Value, Int nIndexOfAttributeInArray );
		void RemoveFloatAttributeModifier( Name attribute, Byte modType, Float fValue, Int nIndexOfAttributeInArray );
		void AddFloatAttributeModifier( Name attribute, Byte modType, Float fValue, Int nIndexOfAttributeInArray );
		void SetFloatAttribute( Name attribute, Float fValue, Int nIndexOfAttributeInArray );
	};

	class BioAttributesEpicPawn: public BioAttributes
	{
		DECLARE_PACKAGE_CLASS( BioAttributesEpicPawn, BioAttributes, SFXGame )

	public:

		String m_FirstName; //offset = 72, size = 12
		m_LastName m_LastName; //offset = 84, size = 4
		BioComplexFloatStructAttribute m_BioticMultiplier; //offset = 88, size = 92
		BioComplexFloatStructAttribute m_TechMultiplier; //offset = 180, size = 92
		BioComplexFloatStructAttribute m_PowerCooldownMultiplier; //offset = 272, size = 92
		BioComplexIntStructAttribute m_ScanLevel; //offset = 364, size = 116
		BioComplexFloatStructAttribute m_RadarRange; //offset = 480, size = 92
		Float m_initialRadarRange; //offset = 572, size = 4

		String GetName();
		String GetDesignedName();
	};

	enum EBioAttributesItemRaceType
	{
		BIO_ATTRIBUTES_ITEM_RACE_TYPE_ANY,
		BIO_ATTRIBUTES_ITEM_RACE_TYPE_HUMAN,
		BIO_ATTRIBUTES_ITEM_RACE_TYPE_TURIAN,
		BIO_ATTRIBUTES_ITEM_RACE_TYPE_QUARIAN,
	};

	class BioAttributesItem: public BioAttributes
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItem, BioAttributes, SFXGame )

	public:

		m_Name m_Name; //offset = 72, size = 4
		m_Description m_Description; //offset = 76, size = 4
		String m_Label; //offset = 80, size = 12
		Byte m_RaceType; //offset = 92, size = 1
		BioComplexFloatStructAttribute m_BaseItemPrice; //offset = 96, size = 92
		Int m_ShopGuiItemPictureID; //offset = 188, size = 4
		Bool m_IsExpanded: 1; //offset = 192, size = 4
		Bool m_InstantChange: 1; //offset = 192, size = 4

		void DescribeAttributes();
	};

	class BioAttributesItemSophisticated: public BioAttributesItem
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemSophisticated, BioAttributesItem, SFXGame )

	public:

		Int m_appearanceVariant; //offset = 196, size = 4
		Int m_MaterialParameterBlockIndex; //offset = 200, size = 4

		void DescribeAttributes();
	};

	class BioAttributesItemEquippable: public BioAttributesItemSophisticated
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemEquippable, BioAttributesItemSophisticated, SFXGame )

	public:

		void DescribeAttributes();
	};

	class BioAttributesItemBioAmp: public BioAttributesItemEquippable
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemBioAmp, BioAttributesItemEquippable, SFXGame )

	public:

		BioComplexFloatStructAttribute m_Telekinetics; //offset = 204, size = 92
		BioComplexFloatStructAttribute m_SpatialDistortion; //offset = 296, size = 92
		BioComplexFloatStructAttribute m_Kinetics; //offset = 388, size = 92
		Float m_fInitialTelekinetics; //offset = 480, size = 4
		Float m_fInitialSpatialDistortion; //offset = 484, size = 4
		Float m_fInitialKinetics; //offset = 488, size = 4
	};

	class BioAttributesItemXModdable: public BioAttributesItemEquippable
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemXModdable, BioAttributesItemEquippable, SFXGame )

	public:
	};

	class BioAttributesItemOmniTool: public BioAttributesItemXModdable
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemOmniTool, BioAttributesItemXModdable, SFXGame )

	public:

		BioComplexFloatStructAttribute m_Electronics; //offset = 204, size = 92
		BioComplexFloatStructAttribute m_Decryption; //offset = 296, size = 92
		BioComplexFloatStructAttribute m_Medical; //offset = 388, size = 92
		Float m_fInitialElectronics; //offset = 480, size = 4
		Float m_fInitialDecryption; //offset = 484, size = 4
		Float m_fInitialMedical; //offset = 488, size = 4
	};

	class BioAttributesItemXMod: public BioAttributesItemSophisticated
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemXMod, BioAttributesItemSophisticated, SFXGame )

	public:

		void DescribeAttributes();
	};

	enum EBioAttributePawnRace
	{
		BIO_ATTRIBUTE_PAWN_RACE_HUMAN,
		BIO_ATTRIBUTE_PAWN_RACE_ASARI,
		BIO_ATTRIBUTE_PAWN_RACE_TURIAN,
		BIO_ATTRIBUTE_PAWN_RACE_SALARIAN,
		BIO_ATTRIBUTE_PAWN_RACE_QUARIAN,
	};

	enum EBioAttributePawnGender
	{
		BIO_ATTRIBUTE_PAWN_GENDER_MALE,
		BIO_ATTRIBUTE_PAWN_GENDER_FEMALE,
	};

	class BioAttributesPawn: public BioAttributesEpicPawn
	{
		DECLARE_PACKAGE_CLASS( BioAttributesPawn, BioAttributesEpicPawn, SFXGame )

	public:

		Byte m_Race; //offset = 576, size = 1
		BioComplexIntStructAttribute m_HazardLevel; //offset = 580, size = 116
		BioComplexFloatStructAttribute m_DamageDurationMult; //offset = 696, size = 92
		BioComplexFloatStructAttribute m_ResistanceBiotic; //offset = 788, size = 92
		BioComplexFloatStructAttribute m_SkillElectronics; //offset = 880, size = 92
		BioComplexFloatStructAttribute m_SkillDecryption; //offset = 972, size = 92
		BioComplexFloatStructAttribute m_ThreatMultiplier; //offset = 1064, size = 92
		BioComplexFloatStructAttribute m_CreditsMultiplier; //offset = 1156, size = 92
		BioComplexFloatStructAttribute m_SalvageMultiplier; //offset = 1248, size = 92
		BioComplexFloatStructAttribute m_MediGelMultiplier; //offset = 1340, size = 92
		BioComplexFloatStructAttribute m_PhysicsResistance; //offset = 1432, size = 92
		Float m_initialDamageDurationMult; //offset = 1524, size = 4
		Float m_initialResistanceSuppression; //offset = 1528, size = 4
		Float m_initialResistanceBiotic; //offset = 1532, size = 4
		Float m_initialSkillElectronics; //offset = 1536, size = 4
		Float m_initialSkillDecryption; //offset = 1540, size = 4
		Float m_initialThreatMultiplier; //offset = 1544, size = 4
		Float m_StormMax; //offset = 1548, size = 4
		Float m_StormRegenPerSecond; //offset = 1552, size = 4

		void RemoveFloatAttributeModifier( Name attribute, Byte modType, Float fValue, Int nIndexOfAttributeInArray );
		void AddFloatAttributeModifier( Name attribute, Byte modType, Float fValue, Int nIndexOfAttributeInArray );
		void SetFloatAttribute( Name attribute, Float fValue, Int nIndexOfAttributeInArray );
	};

	enum EBioPartyMemberClassSpecialization
	{
		BIO_PARTY_MEMBER_CLASS_SPECIALIZATION_NONE_DEPRECATED,
		BIO_PARTY_MEMBER_CLASS_SPECIALIZATION_MARINE_DEPRECATED,
		BIO_PARTY_MEMBER_CLASS_SPECIALIZATION_RANGER_DEPRECATED,
		BIO_PARTY_MEMBER_CLASS_SPECIALIZATION_INFILTRATOR_DEPRECATED,
		BIO_PARTY_MEMBER_CLASS_SPECIALIZATION_MEDIC_DEPRECATED,
	};

	enum EBioPartyMemberClassBase
	{
		BIO_PARTY_MEMBER_CLASS_BASE_SOLDIER,
		BIO_PARTY_MEMBER_CLASS_BASE_ENGINEER,
		BIO_PARTY_MEMBER_CLASS_BASE_ADEPT,
		BIO_PARTY_MEMBER_CLASS_BASE_INFILTRATOR,
		BIO_PARTY_MEMBER_CLASS_BASE_SAVANT,
		BIO_PARTY_MEMBER_CLASS_BASE_REAVER,
		BIO_PARTY_MEMBER_CLASS_BASE_ASARI_SCIENTIST,
	};

	class BioAttributesPawnParty: public BioAttributesPawn
	{
		DECLARE_PACKAGE_CLASS( BioAttributesPawnParty, BioAttributesPawn, SFXGame )

	public:

		Int m_Experience; //offset = 1556, size = 4
		Int m_TalentPoints; //offset = 1560, size = 4
		Int m_TalentPoolPoints; //offset = 1564, size = 4
		Byte m_ClassBase; //offset = 1568, size = 1
		m_LocalizedClassName m_LocalizedClassName; //offset = 1572, size = 4
		Int m_AutoLevelUpTemplateID; //offset = 1576, size = 4

		void SetCombatAttributes( Float fDamageDurationMult );
	};

	enum EBioPlayerCharacterBackgroundNotoriety
	{
		BIO_PLAYER_CHARACTER_BACKGROUND_NOTORIETY_NONE,
		BIO_PLAYER_CHARACTER_BACKGROUND_NOTORIETY_SURVIVOR,
		BIO_PLAYER_CHARACTER_BACKGROUND_NOTORIETY_WARHERO,
	};

	enum EBioPlayerCharacterBackgroundOrigin
	{
		BIO_PLAYER_CHARACTER_BACKGROUND_ORIGIN_NONE,
		BIO_PLAYER_CHARACTER_BACKGROUND_ORIGIN_SPACER,
		BIO_PLAYER_CHARACTER_BACKGROUND_ORIGIN_COLONY,
	};

	enum EBioPlayerCharacterSpectreRank
	{
		BIO_PLAYER_CHARACTER_SPECTRE_RANK_NONE,
		BIO_PLAYER_CHARACTER_SPECTRE_RANK_OPERATIVE,
	};

	class BioAttributesPawnPlayer: public BioAttributesPawnParty
	{
		DECLARE_PACKAGE_CLASS( BioAttributesPawnPlayer, BioAttributesPawnParty, SFXGame )

	public:

		Int m_SpecializationBonusID; //offset = 1580, size = 4
		Byte m_SpectreRank; //offset = 1584, size = 1
		Byte m_BackgroundOrigin; //offset = 1585, size = 1
		Byte m_BackgroundNotoriety; //offset = 1586, size = 1
		BioComplexFloatStructAttribute m_SkillCharm; //offset = 1588, size = 92
		BioComplexFloatStructAttribute m_SkillIntimidate; //offset = 1680, size = 92
		BioComplexFloatStructAttribute m_SkillHaggle; //offset = 1772, size = 92
		BioComplexFloatStructAttribute m_SkillSalesman; //offset = 1864, size = 92
		Float MINIMUM_SKILL_HAGGLE; //offset = 1956, size = 4
		Float MAXIMUM_SKILL_HAGGLE; //offset = 1960, size = 4
		Float MINIMUM_SKILL_SALESMAN; //offset = 1964, size = 4
		Float MAXIMUM_SKILL_SALESMAN; //offset = 1968, size = 4
	};

	class BioAttributesPawnVehicle: public BioAttributesEpicPawn
	{
		DECLARE_PACKAGE_CLASS( BioAttributesPawnVehicle, BioAttributesEpicPawn, SFXGame )

	public:

		BioComplexFloatStructAttribute m_NitrousAmount; //offset = 576, size = 92
		BioComplexFloatStructAttribute m_ThrusterAmount; //offset = 668, size = 92
		BioComplexFloatStructAttribute m_ThrusterAmountMax; //offset = 760, size = 92
		BioComplexFloatStructAttribute m_ThrusterUsageRate; //offset = 852, size = 92
		BioComplexFloatStructAttribute m_ThrusterRebuildRate; //offset = 944, size = 92
		BioComplexFloatStructAttribute m_ThrusterForce; //offset = 1036, size = 92
		Float m_RunOverVelocityThreshold; //offset = 1128, size = 4
		Float m_RunOverImpulseBase; //offset = 1132, size = 4
		Float m_RunOverDamageBase; //offset = 1136, size = 4
		Float m_initialNitrousAmount; //offset = 1140, size = 4
		Float m_initialThrusterAmount; //offset = 1144, size = 4
		Float m_initialThrusterAmountMax; //offset = 1148, size = 4
		Float m_initialThrusterUsageRate; //offset = 1152, size = 4
		Float m_initialThrusterRebuildRate; //offset = 1156, size = 4
		Float m_initialThrusterForce; //offset = 1160, size = 4
		Float m_initialRunOverVelocityThreshold; //offset = 1164, size = 4
		Float m_initialRunOverImpulseBase; //offset = 1168, size = 4
		Float m_initialRunOverDamageBase; //offset = 1172, size = 4
		m_ConfigVehicleName m_ConfigVehicleName; //offset = 1176, size = 4
	};

	enum EBioPowerType
	{
		BIO_POWER_TYPE_UNKNOWN,
		BIO_POWER_TYPE_CYLINDER,
		BIO_POWER_TYPE_TARGET,
		BIO_POWER_TYPE_PARTY,
	};

	enum EBioPowerResource
	{
		BIO_POWER_RESOURCE_VFX_PLAYER_CRUST,
		BIO_POWER_RESOURCE_VFX_PLAYER_MATERIAL,
		BIO_POWER_RESOURCE_VFX_TARGET_CRUST,
		BIO_POWER_RESOURCE_VFX_TARGET_MATERIAL,
		BIO_POWER_RESOURCE_VFX_FRAMEBUFFER,
		BIO_POWER_RESOURCE_VFX_TRAVELLING,
		BIO_POWER_RESOURCE_VFX_IMPACT,
	};

	class BioPower: public BioAttributes
	{
		DECLARE_PACKAGE_CLASS( BioPower, BioAttributes, SFXGame )

	public:

		Name m_nmPower; //offset = 72, size = 8
		BioPowerScript* Script; //offset = 80, size = 4
		Controller* Instigator; //offset = 84, size = 4
		SFXPower* NewPower; //offset = 88, size = 4
		Bool m_bFakePower: 1; //offset = 92, size = 4
		Bool m_bDisableVFX: 1; //offset = 92, size = 4
		Bool m_bDisableDamageAndEffects: 1; //offset = 92, size = 4
		Bool m_bDisableAnimation: 1; //offset = 92, size = 4
		String m_sRTPCName; //offset = 96, size = 12
		Float m_fTotalCooldownTime; //offset = 108, size = 4
		Float m_fCooldownRemaining; //offset = 112, size = 4
		Int m_nSuppressedCount; //offset = 116, size = 4

		Float GetDifficultyCooldownMultiplier();
		Bool ShouldDisplayInHUD();
		Bool GetDescription( String sDescription );
		Bool GetImpactText( srImpactText srImpactText );
		Bool GetDisplayName( String sDisplayName );
		Int GetPowerIcon();
		Float GetImpactNoise();
		Float GetReleaseNoise();
		Bool CancelPower();
		Bool IsActive();
		Bool CanCasterMoveDuringPower();
		void Tick( Float fDeltaTime );
		void SetTotalCooldownTime( Float fTotalCooldown );
		Float GetTotalCooldownTime();
		void SetCooldownRemaining( Float fCooldownRemaining );
		Float GetCooldownRemaining();
		Bool IsSuppressed();
		Int SuppressPower( Bool bSuppress );
		Bool IsEnabled();
		Byte GetType();
		Bool GetProjectileAttachPoint( Pawn* pPawn, Vector vAttachPoint );
		Bool GetAnimSet( AnimSet* oAnimSet );
		void DoImpactVFX( Byte ImpactType, Actor* oActor, Vector vLocation, Vector vHitNormal, Float fCastingTimeRemaining, Name BoneName );
		Float GetVFXLifetime( Byte eResource, Float fCastingTimeRemaining );
		BioVFXTemplate* GetVFXTemplate( Byte eResource );
		void EndVisualEffect( Byte eResource, Bool bAllowVFXToFinish );
		Bool CreateVisualEffect( Byte eResource, BioVisualEffect* pEffect );
		void CreatePowerScript();
		void InitializePower( Name nmPower );
		Byte GetDiscipline();
		Byte GetCapabilityType();
		Bool GetStopOnFirstHit();
		Bool GetBlockedByObjects();
		Float GetConeHalfAngle();
		Float GetVFXIntensity();
		Float GetEffectDuration();
		Float GetImpactRadius();
		Float GetMaximumRange();
		Float GetMinimumRange();
		Float GetProjectileRadius();
		Float GetProjectileSpeed();
		Float GetGlobalCooldown();
		Float GetCooldownTime();
		Float GetReleaseAnimRate();
		Float GetCastingTime();
	};

	struct PowerReservation
	{
		Int nID; //offset = 0, size = 4
		Float fTimeUntilExpiry; //offset = 4, size = 4
	};

	class BioPowerManager: public Object
	{
		DECLARE_PACKAGE_CLASS( BioPowerManager, Object, SFXGame )

	public:

		Map_Mirror m_mapGlobalCooldowns; //offset = 60, size = 20
		Array<PowerReservation> m_aReservations; //offset = 80, size = 12
		Int m_nCurrentReservationID; //offset = 92, size = 4

		Bool CanImpactActor( Actor* oActor );
		void TickReservations( Float fDeltaTime );
		Bool StartReservation( Int nReservationID );
		void ClearReservation( Int nReservationID );
		Int MakeReservation( BioPower* oPower, Pawn* oPawn, Bool bForceSuccess );
		void TickGlobalCooldowns( Float fDeltaTime );
		Float GetGlobalCooldown( Name nmPower );
		void SetGlobalCooldown( Name nmPower, Float fCooldown );
		void Tick( Float fDeltaTime );
		void ChooseTargetForPlayer( BioPower* oPower, Actor* oTarget, Vector vTargetLocation );
		Bool AreActorsFriendly( Actor* oFirstActor, Actor* oSecondActor );
		Bool CheckLOSToLocation( Actor* oSourceActor, Vector vStartLocation, Vector vEndLocation, Float fMaxRange, Bool bIgnoreFriendlies, Actor* oHitActor, Vector vHitLocation, Vector vHitNormal );
		Bool CheckLOSToActor( Actor* oSourceActor, Actor* oDestinationActor, Vector vStartLocation, Float fMaxRange, Bool bIgnoreFriendlies, Bool bIgnorePawns, Actor* oHitActor, Vector vHitLocation, Vector vHitNormal );
		void GetStartLocationForLOSCheck( Pawn* Caster, Vector vStartLocation );
	};

	class BioPowerScript: public Object
	{
		DECLARE_PACKAGE_CLASS( BioPowerScript, Object, SFXGame )

	public:

		Bool m_bWeaponModePower: 1; //offset = 60, size = 4
		Bool bShouldTick: 1; //offset = 60, size = 4
		Vector m_vWorldImpactLocation; //offset = 64, size = 12
		Vector m_vWorldImpactNormal; //offset = 76, size = 12
		Vector m_vProjectileVelocity; //offset = 88, size = 12
		Vector m_vProjectileLocation; //offset = 100, size = 12
		Array<Actor*> m_ImpactedActors; //offset = 112, size = 12
		ForceFeedbackWaveform* m_ImpactWaveForm; //offset = 124, size = 4
		Actor* m_oTargetToAimAt; //offset = 128, size = 4
		Vector m_vLocationToAimAt; //offset = 132, size = 12
		Bool m_bPlayerOrderedPowerUse: 1; //offset = 144, size = 4
		Recommended_TargetVulnerable Recommended_TargetVulnerable; //offset = 148, size = 4
		NotRecommended_TargetOrganic NotRecommended_TargetOrganic; //offset = 152, size = 4
		NotRecommended_TargetMachine NotRecommended_TargetMachine; //offset = 156, size = 4
		NotRecommended_TargetHasShields NotRecommended_TargetHasShields; //offset = 160, size = 4
		NotRecommended_TargetHasBiotics NotRecommended_TargetHasBiotics; //offset = 164, size = 4
		NotRecommended_TargetHasArmor NotRecommended_TargetHasArmor; //offset = 168, size = 4
		NotRecommended_NoMedigel NotRecommended_NoMedigel; //offset = 172, size = 4
		NotRecommended_NoSquadMemberDead NotRecommended_NoSquadMemberDead; //offset = 176, size = 4
		NotRecommended_NoSquadMemberInjured NotRecommended_NoSquadMemberInjured; //offset = 180, size = 4
		NotRecommended_WeaponPowerAlreadyOn NotRecommended_WeaponPowerAlreadyOn; //offset = 184, size = 4
		NotRecommended_TargetImmune NotRecommended_TargetImmune; //offset = 188, size = 4

		void DebugDraw_Power( BioHUD* H );
		String GetHUDWheelIconInfo( BioPawn* OwnerPawn );
		void ReloadAmmoPower( BioPawn* Target, SFXWeapon* Weapon );
		void OnOwnerDied();
		void OnSquadMemberAdded( Pawn* Pawn );
		void OnPowersLoaded();
		void OnPowerRankIncreased();
		void OnPowerAdded( SFXPower* Power );
		SFXShield_Base* GetCurrentShields( BioPawn* Target, SFXShield_Base* Shields );
		Bool ShouldUsePowerOnShields( BioPawn* Target, Class* DamageType, String sOptionalInfo, SFXShield_Base* CurrentShields );
		Bool ShouldUsePower( Actor* Caster, Actor* Target, String sOptionalInfo );
		Float GetDuration();
		Float GetElapsedTime();
		Bool PlayForceFeedback( Actor* oCaster, Actor* oImpacted, BioPawn* pPawn, BioPlayerController* pPC, BioPlayerController* pController, BioVehicleBase* pVehicle, BioWorldInfo* pWorldInfo, Bool bPlayForceFeedback );
		Bool PlayGuiSound( Name nmSound );
		Bool GetFloorLocation( Vector vStartLocation, Vector vFloorLocation );
		void GetCooldownResearchBonus( Float fStaticResearchBonus );
		Bool AdjustCooldown( Float fCoolDownTime, Float fStaticBonus );
		Bool EffectUnapply( Actor* oCaster, Float fCasterStability, Actor* oImpacted, Int nPreviouslyImpacted );
		Bool OnImpact( Actor* oCaster, Float fCasterStability, Actor* oImpacted, Int nPreviouslyImpacted );
		Bool PowerSharesCooldown( BioPower* Power );
		void SetPowerCooldowns( BioPawn* Pawn, Float Cooldown, BioPawnBehavior* Behavior, Int nIndex, BioPower* Power );
		Bool GetPowerCooldown( Float Cooldown );
		Bool EndPhase( Byte ePhase, Actor* oCaster, SFXGame* oGame, Float Cooldown );
		Bool StartPhase( Byte ePhase, Actor* oCaster, Float fDuration );
		Bool CanStartPower( Actor* oCaster );
		void Tick( Float DeltaTime );
		void OnProjectileExploded( Actor* oCaster, Vector HitLocation, Vector HitNormal, Vector Velocity );
		void OnWeaponReload( SFXWeapon* Weapon, Bool QuickReload );
		void OnWeaponUnequip( SFXWeapon* Weapon );
		void OnWeaponEquip( SFXWeapon* Weapon );
		void OnWeaponImpact( SFXWeapon* Weapon, ImpactInfo Impact );
		void InitializePowerScript();
	};

	class BioMaterialExpressionAnisoSpec: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionAnisoSpec, MaterialExpression, SFXGame )

	public:

		ExpressionInput Direction; //offset = 88, size = 28
		ExpressionInput SpecColor; //offset = 116, size = 28
		ExpressionInput SpecPower; //offset = 144, size = 28
	};

	class BioMaterialExpressionBlinnSpec: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionBlinnSpec, MaterialExpression, SFXGame )

	public:

		ExpressionInput Normal; //offset = 88, size = 28
		ExpressionInput SpecColor; //offset = 116, size = 28
		ExpressionInput SpecPower; //offset = 144, size = 28
	};

	class BioMaterialExpressionDirt: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionDirt, MaterialExpression, SFXGame )

	public:

		ExpressionInput Input; //offset = 88, size = 28
		Name GrimeScaleParamName; //offset = 116, size = 8
		Name GrimeTexParamName; //offset = 124, size = 8
		Texture2D* GrimeTex; //offset = 132, size = 4
	};

	class BioMaterialExpressionFresnel: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionFresnel, MaterialExpression, SFXGame )

	public:

		ExpressionInput Normal; //offset = 88, size = 28
		Bool Inverted: 1; //offset = 116, size = 4
		Float Power; //offset = 120, size = 4
	};

	class BioMaterialExpressionHalfAngle: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionHalfAngle, MaterialExpression, SFXGame )

	public:
	};

	class BioMaterialExpressionKeyedFlipbook: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionKeyedFlipbook, MaterialExpression, SFXGame )

	public:

		ExpressionInput Coord; //offset = 88, size = 28
		ExpressionInput Time; //offset = 116, size = 28
		Int FlipTexRows; //offset = 144, size = 4
		Int FlipTexCols; //offset = 148, size = 4
		Texture2D* FlipTex; //offset = 152, size = 4
	};

	class BioMaterialExpressionPhongSpec: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionPhongSpec, MaterialExpression, SFXGame )

	public:

		ExpressionInput Normal; //offset = 88, size = 28
		ExpressionInput SpecColor; //offset = 116, size = 28
		ExpressionInput SpecPower; //offset = 144, size = 28
	};

	class BioMaterialExpressionSineSubtend: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionSineSubtend, MaterialExpression, SFXGame )

	public:

		ExpressionInput A; //offset = 88, size = 28
		ExpressionInput B; //offset = 116, size = 28
	};

	class BioMaterialExpressionSpecPower: public MaterialExpression
	{
		DECLARE_PACKAGE_CLASS( BioMaterialExpressionSpecPower, MaterialExpression, SFXGame )

	public:

		ExpressionInput Input; //offset = 88, size = 28
	};

	struct ScalarParameter
	{
		Name nName; //offset = 0, size = 8
		Float sValue; //offset = 8, size = 4
	};

	struct ColorParameter
	{
		Name nName; //offset = 0, size = 8
		LinearColor cValue; //offset = 8, size = 16
	};

	struct TextureParameter
	{
		Name nName; //offset = 0, size = 8
		Texture* m_pTexture; //offset = 8, size = 4
	};

	class BioMaterialOverride: public Object
	{
		DECLARE_PACKAGE_CLASS( BioMaterialOverride, Object, SFXGame )

	public:

		Array<TextureParameter> m_aTextureOverrides; //offset = 60, size = 12
		Array<ColorParameter> m_aColorOverrides; //offset = 72, size = 12
		Array<ScalarParameter> m_aScalarOverrides; //offset = 84, size = 12

		Class* GetSaveObjectClass();
	};

	enum EBioGameEffectClassPriority
	{
		BIO_GAME_EFFECT_CLASS_PRIORITY_STANDARD,
		BIO_GAME_EFFECT_CLASS_PRIORITY_ADD_POWER_PARAMETER,
	};

	class BioGameEffect: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGameEffect, Object, SFXGame )

	public:

		Byte m_priority; //offset = 60, size = 1
		Int m_nGameEffectId; //offset = 64, size = 4
		Name m_nmGameEffectName; //offset = 68, size = 8
		Bio2DA* m_pEffectLevels2DA; //offset = 76, size = 4
		Array<Int> m_aEffectLevelsRows; //offset = 80, size = 12
		Int m_nMaxRanks; //offset = 92, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		Actor* GetActorFromTarget( Object* oTarget );
		void Scale( Int nRank );
		void SetScalingData( Bio2DA* pEffectLevels2DA, Array<Int> aEffectLevelRows, Int maxRanks );
		void Update( Object* oTarget );
		void Tick( Object* oTarget, Float fDeltaTime );
	};

	class BioGameEffectAddForce: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAddForce, BioGameEffect, SFXGame )

	public:

		Vector m_vForce; //offset = 96, size = 12
		Name m_nmBoneName; //offset = 108, size = 8
		Vector m_vPosition; //offset = 116, size = 12
		Vector m_vDestination; //offset = 128, size = 12
		Bool m_bDecelerate: 1; //offset = 140, size = 4
		Bool m_bApplyToAllBones: 1; //offset = 140, size = 4
		Bool m_bApplied: 1; //offset = 140, size = 4
		Bool m_bDestinationReached: 1; //offset = 140, size = 4
		Vector m_vDeceleration; //offset = 144, size = 12
		Float m_fMinVelocity; //offset = 156, size = 4
		Actor* m_oInstigator; //offset = 160, size = 4
		Float m_fTimeElapsed; //offset = 164, size = 4

		Name GetClosestBone( Actor* oTarget );
		void Decelerate( Actor* oActor );
		void Tick( Object* oTarget, Float fDeltaTime );
		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, Vector vForce, Name nmBoneName, Vector vPosition, Vector vDestination, Bool bDecelerateAtDestination, Vector vDeceleration, Float fMinVelocity, Actor* oInstigator, Bool bApplyToAllBones, BioGameEffectAddForce* oEffect );
	};

	class BioGameEffectAddItemProperty: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAddItemProperty, BioGameEffect, SFXGame )

	public:

		Int m_nItemPropertyID; //offset = 96, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectAttribute: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttribute, BioGameEffect, SFXGame )

	public:

		Name m_attributeName; //offset = 96, size = 8
		Byte m_type; //offset = 104, size = 1
		Int m_nIndex; //offset = 108, size = 4
		BioAttributeMapper* m_oAttributeMapper; //offset = 112, size = 4

		BioAttributes* GetAttributes( Object* oTarget );
		BioAttributes* StaticGetAttributes( Object* oTarget, Byte eType );
		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectAttributeBool: public BioGameEffectAttribute
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttributeBool, BioGameEffectAttribute, SFXGame )

	public:

		Bool m_value: 1; //offset = 116, size = 4
		Bool m_bSetToOppositeOnUnapply: 1; //offset = 116, size = 4

		void Create( BioGameProperty* oProperty, Bool bValue, Name nmAttributeName, Byte eType, Bool bSetToOppositeOnUnapply, BioGameEffectAttributeBool* oEffect );
		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectAttributeByte: public BioGameEffectAttribute
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttributeByte, BioGameEffectAttribute, SFXGame )

	public:

		Byte m_value; //offset = 116, size = 1
		Bool m_bZeroOnUnapply: 1; //offset = 120, size = 4

		void Create( BioGameProperty* oProperty, Byte Value, Name nmAttributeName, Byte eType, Bool bZeroOnUnapply, BioGameEffectAttributeByte* oEffect );
		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectAttributeString: public BioGameEffectAttribute
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttributeString, BioGameEffectAttribute, SFXGame )

	public:

		String m_value; //offset = 116, size = 12

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectAttributeEnum: public BioGameEffectAttributeString
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttributeEnum, BioGameEffectAttributeString, SFXGame )

	public:

		Object* Apply( Object* oTarget );
	};

	enum EBioGameEffectAttributeAspect
	{
		BIO_ATTRIBUTE_ASPECT_BASE,
		BIO_ATTRIBUTE_ASPECT_MODIFIER,
	};

	class BioGameEffectAttributeNumeric: public BioGameEffectAttribute
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttributeNumeric, BioGameEffectAttribute, SFXGame )

	public:

		Byte m_aspect; //offset = 116, size = 1
		Byte m_modifier; //offset = 117, size = 1
		Int m_baseOverrideIndex; //offset = 120, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectAttributeFloat: public BioGameEffectAttributeNumeric
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttributeFloat, BioGameEffectAttributeNumeric, SFXGame )

	public:

		Float m_value; //offset = 124, size = 4

		void Create( BioGameProperty* gp, Float fValue, Name nmAttributeName, Byte eAspect, Byte eModifier, Byte eType, Int nIndex, BioGameEffectAttributeFloat* newEffect );
		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectAttributeInt: public BioGameEffectAttributeNumeric
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttributeInt, BioGameEffectAttributeNumeric, SFXGame )

	public:

		Int m_value; //offset = 124, size = 4
		Bool m_bSetToZeroOnUnapply: 1; //offset = 128, size = 4

		void Create( BioGameProperty* gp, Int nValue, Name nmAttributeName, Byte eAspect, Byte eModifier, Byte eType, Int nIndex, Bool bSetToZeroOnUnapply, BioGameEffectAttributeInt* newEffect );
		void Unapply( Object* oTarget );
		void RemoveModifier( BioAttributes* attribs );
		void AddModifier( BioAttributes* attribs );
		void SetBase( BioAttributes* attribs );
	};

	class BioGameEffectAttributeName: public BioGameEffectAttribute
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAttributeName, BioGameEffectAttribute, SFXGame )

	public:

		Name m_nmValue; //offset = 116, size = 8
		Bool m_bSetToNoneOnUnapply: 1; //offset = 124, size = 4

		void Create( BioGameProperty* oProperty, Name nmValue, Name nmAttributeName, Byte eType, Bool bSetToNoneOnUnapply, BioGameEffectAttributeName* oEffect );
		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectDisableAI: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectDisableAI, BioGameEffect, SFXGame )

	public:

		Byte m_eDisableType; //offset = 96, size = 1
		Name m_nmSubType; //offset = 100, size = 8
		Bool m_bApplied: 1; //offset = 108, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, Byte eType, Name nmSubType, BioGameEffectDisableAI* oEffect );
	};

	class BioGameEffectDmgVulnerability: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectDmgVulnerability, BioGameEffect, SFXGame )

	public:

		Float m_fDamageVulnerability; //offset = 96, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, Float fDamageVulnerability, BioGameEffectDmgVulnerability* oEffect );
	};

	class BioGameEffectGiveGP: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectGiveGP, BioGameEffect, SFXGame )

	public:

		BioGameProperty* m_pGP; //offset = 96, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void SetGP( BioGameProperty* pGP );
	};

	class BioGameEffectHackAI: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectHackAI, BioGameEffect, SFXGame )

	public:

		BioEpicPawnBehavior* m_pSourceBehavior; //offset = 96, size = 4
		BioBaseSquad* m_pOriginalSquad; //offset = 100, size = 4

		void Create( BioGameProperty* oProperty, BioEpicPawnBehavior* oHacker, BioGameEffectHackAI* oEffect );
		void Unapply( Object* pTarget );
		Object* Apply( Object* pTarget );
		void InitializeHackAI( BioEpicPawnBehavior* pSourceBehavior );
	};

	class BioGameEffectHeadExplode: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectHeadExplode, BioGameEffect, SFXGame )

	public:

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectHeal: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectHeal, BioGameEffect, SFXGame )

	public:

		Float m_fHealthAmount; //offset = 96, size = 4
		Int m_nResourcesRequired; //offset = 100, size = 4

		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, Float fHealthAmount, Int nResourcesRequired, BioGameEffectHeal* oEffect );
	};

	class BioGameEffectImporter: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectImporter, BioBaseComponent, SFXGame )

	public:

		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_EffectCache; //offset = 68, size = 20

		BioGameEffect* CreateGameEffect( Object* _outer, Bio2DA* gameEffectTable, Int nGameEffectID, Bool bUseInstantGamePropertyAllocator );
	};

	class BioGameEffectModifyGravity: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectModifyGravity, BioGameEffect, SFXGame )

	public:

		Float m_fScalingValue; //offset = 96, size = 4
		Bool m_bApplied: 1; //offset = 100, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, Float fScalingValue, BioGameEffectModifyGravity* oEffect );
	};

	class BioGameEffectPoolAllocator: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectPoolAllocator, Object, SFXGame )

	public:

		Int m_nFloatPoolSize; //offset = 60, size = 4
		Int m_nIntPoolSize; //offset = 64, size = 4
		Int m_nAllocatedFloats; //offset = 68, size = 4
		Int m_nAllocatedInts; //offset = 72, size = 4
		Array<BioGameEffectAttributeFloat*> m_aGEAttributeFloat; //offset = 76, size = 12
		Array<BioGameEffectAttributeInt*> m_aGEAttributeInt; //offset = 88, size = 12

		Bool FreeGEAttributeInt( BioGameEffect* IntGE );
		Bool FreeGEAttributeFloat( BioGameEffect* FloatGE );
		BioGameEffectAttributeInt* AllocateGEAttributeInt();
		BioGameEffectAttributeFloat* AllocateGEAttributeFloat();
	};

	class BioGameEffectPowerAttributeBool: public BioGameEffectAttributeBool
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectPowerAttributeBool, BioGameEffectAttributeBool, SFXGame )

	public:

		Name m_powerName; //offset = 120, size = 8

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectPowerAttributeFloat: public BioGameEffectAttributeFloat
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectPowerAttributeFloat, BioGameEffectAttributeFloat, SFXGame )

	public:

		Name m_powerName; //offset = 128, size = 8

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectPowerAttributeSet: public BioGameEffectAttribute
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectPowerAttributeSet, BioGameEffectAttribute, SFXGame )

	public:

		Name m_powerName; //offset = 116, size = 8
		Float m_CastingTime; //offset = 124, size = 4
		Float m_TravelSpeed; //offset = 128, size = 4
		Float m_Kickback; //offset = 132, size = 4
		Float m_CooldownTime; //offset = 136, size = 4
		Float m_CylinderRadius; //offset = 140, size = 4
		Float m_MinimumRange; //offset = 144, size = 4
		Float m_MaximumRange; //offset = 148, size = 4
		Float m_ImpactRadius; //offset = 152, size = 4
		Float m_UseDuration; //offset = 156, size = 4
		Float m_EffectDuration; //offset = 160, size = 4
		Float m_VFXIntensity; //offset = 164, size = 4
		Float m_ImpactVolumeLength; //offset = 168, size = 4
		Float m_ImpactVolumeHalfAngle; //offset = 172, size = 4
		Float m_BuildUpTimeout; //offset = 176, size = 4
		Int m_RequiredResource; //offset = 180, size = 4
		Float m_GlobalCooldown; //offset = 184, size = 4
		Bool m_bBlockedByObjects: 1; //offset = 188, size = 4
		Bool m_bStopOnFirstHit: 1; //offset = 188, size = 4
		Bool m_bEnabled: 1; //offset = 188, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectPowerBuildUp: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectPowerBuildUp, BioGameEffect, SFXGame )

	public:

		BioPower* m_oPower; //offset = 96, size = 4
		Float m_fBuildUpTime; //offset = 100, size = 4
		Float m_fBuildUpTimeout; //offset = 104, size = 4

		void Tick( Object* oTarget, Float fDeltaTime );
		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, BioPower* oPower, Float fTimeOut, BioGameEffectPowerBuildUp* oEffect );
	};

	class BioGameEffectPowerGive: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectPowerGive, BioGameEffect, SFXGame )

	public:

		Name m_powerName; //offset = 96, size = 8

		void Create( BioGameProperty* gp, Name PowerName, BioGameEffectPowerGive* newEffect );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectPowerParameter: public BioGameEffectAttributeFloat
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectPowerParameter, BioGameEffectAttributeFloat, SFXGame )

	public:

		Name m_powerName; //offset = 128, size = 8

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
	};

	class BioGameEffectPowerText: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectPowerText, BioGameEffect, SFXGame )

	public:

		m_srText m_srText; //offset = 96, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, srText srText, BioGameEffectPowerText* oEffect );
	};

	class BioGameEffectRagdoll: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectRagdoll, BioGameEffect, SFXGame )

	public:

		Bool m_bApplied: 1; //offset = 96, size = 4

		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, BioGameEffectRagdoll* oEffect );
	};

	class BioGameEffectRegenerateShield: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectRegenerateShield, BioGameEffect, SFXGame )

	public:

		Float m_fAmount; //offset = 96, size = 4

		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, Float fAmount, BioGameEffectRegenerateShield* oEffect );
	};

	class BioGameEffectSetMaterialParameter: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectSetMaterialParameter, BioGameEffect, SFXGame )

	public:

		Name m_nmMaterialParameter; //offset = 96, size = 8
	};

	class BioGameEffectSetMaterialParameterColor: public BioGameEffectSetMaterialParameter
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectSetMaterialParameterColor, BioGameEffectSetMaterialParameter, SFXGame )

	public:

		Float m_fRed; //offset = 104, size = 4
		Float m_fGreen; //offset = 108, size = 4
		Float m_fBlue; //offset = 112, size = 4
		Float m_fAlpha; //offset = 116, size = 4

		Object* Apply( Object* pTarget );
	};

	class BioGameEffectSetMaterialParameterScalar: public BioGameEffectSetMaterialParameter
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectSetMaterialParameterScalar, BioGameEffectSetMaterialParameter, SFXGame )

	public:

		Float m_fValue; //offset = 104, size = 4

		Object* Apply( Object* pTarget );
	};

	class BioGameEffectSetMaterialParameterTexture: public BioGameEffectSetMaterialParameter
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectSetMaterialParameterTexture, BioGameEffectSetMaterialParameter, SFXGame )

	public:

		Name m_nmTexture; //offset = 104, size = 8

		Object* Apply( Object* pTarget );
	};

	class BioGameEffectSetProperty: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectSetProperty, BioGameEffect, SFXGame )

	public:

		Bool m_bZeroOnUnapply: 1; //offset = 96, size = 4
		Name m_nmProperty; //offset = 100, size = 8
		Bio2DA* m_p2DA; //offset = 108, size = 4
		Int m_nID; //offset = 112, size = 4
		Name m_nmColumn; //offset = 116, size = 8

		void Unapply( Object* pTarget );
		Object* Apply( Object* pTarget );
	};

	class BioGameEffectSingularity: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectSingularity, BioGameEffect, SFXGame )

	public:

		Vector m_vSingularityLocation; //offset = 96, size = 12
		Float m_fForce; //offset = 108, size = 4
		Name m_nmBoneName; //offset = 112, size = 8
		Vector m_vPosition; //offset = 120, size = 12
		Float m_fForceInterval; //offset = 132, size = 4
		Float m_fOuterBubbleRange; //offset = 136, size = 4
		Float m_fVelocityThresholdOuterBubble; //offset = 140, size = 4
		Float m_fInnerBubbleRange; //offset = 144, size = 4
		Float m_fBubbleForce; //offset = 148, size = 4
		Bool m_bApplied: 1; //offset = 152, size = 4
		Float m_fDeltaTime; //offset = 156, size = 4

		void MoveActor( Actor* oActor );
		void Tick( Object* oTarget, Float fDeltaTime );
		void Unapply( Object* oTarget );
		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, Vector vSingularityLocation, Float fForce, Name nmBoneName, Vector vPosition, Float fForceInterval, Float fOuterBubbleRange, Float fVelocityThresholdOuterBubble, Float fInnerBubbleRange, Float fBubbleForce, BioGameEffectSingularity* oEffect );
	};

	class BioGameEffectTakeDamage: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectTakeDamage, BioGameEffect, SFXGame )

	public:

		Float m_fDamage; //offset = 96, size = 4
		Controller* m_oInstigatorController; //offset = 100, size = 4
		Vector m_vHitLocation; //offset = 104, size = 12
		Vector m_vMomentum; //offset = 116, size = 12
		Class* DamageClass; //offset = 128, size = 4

		Object* Apply( Object* oTarget );
		void Create( BioGameProperty* oProperty, Float fDamage, Controller* oInstigatorController, Vector vHitLocation, Vector vMomentum, Class* NewDamageClass, BioGameEffectTakeDamage* oEffect );
	};

	class BioState: public Object
	{
		DECLARE_PACKAGE_CLASS( BioState, Object, SFXGame )

	public:

		Name StateName; //offset = 60, size = 8
		Name AnimationName; //offset = 68, size = 8
		Array<BioTransition*> StateTransitions; //offset = 76, size = 12
		Bool bFinishAnimationBeforeTransition: 1; //offset = 88, size = 4

		BioTransition* GetTransition( Name ToState, Name NamedTransition, BioTransition* BestTransition, Int I );
		Bool HasTransitionTo( Name ToState, Name NamedTransition, Int I );
	};

	class BioFSM: public Object
	{
		DECLARE_PACKAGE_CLASS( BioFSM, Object, SFXGame )

	public:

		Array<BioState*> PlaceableStates; //offset = 60, size = 12

		BioState* GetStateByIndex( Int Index );
		void DEBUG_DumpStates( BioPlayerController* BPC, Int I, Int J, BioState* BS, String sStr );
		BioState* GetState( Name RequestedState, Int I );
	};

	class BioTransition: public Object
	{
		DECLARE_PACKAGE_CLASS( BioTransition, Object, SFXGame )

	public:

		Name TransitionToState; //offset = 60, size = 8
		Name TransitionOptionalName; //offset = 68, size = 8
		Name AnimationName; //offset = 76, size = 8
	};

	enum eBioPendingStateChange
	{
		BIO_PST_Done,
		BIO_PST_Pending,
	};

	class BioFSMComponent: public Object
	{
		DECLARE_PACKAGE_CLASS( BioFSMComponent, Object, SFXGame )

	public:

		BioFSM* FSMData; //offset = 60, size = 4
		BioState* CurrentState; //offset = 64, size = 4
		BioState* PendingState; //offset = 68, size = 4
		BioTransition* PendingTransition; //offset = 72, size = 4
		Byte PendingStateChange; //offset = 76, size = 1
		OnTransition OnTransition; //offset = 80, size = 12
		__OnTransitionDelegate__Delegate __OnTransitionDelegate__Delegate; //offset = 92, size = 12

		Bool IsTransitioning();
		void CallTransitionDelegate( Name From, Name To );
		void TransitionStarted();
		Bool HasState( Name ToState );
		BioState* SetState( Name ToState, Name NamedTransition, Bool IgnoreTransition, Bool bForceStateNow );
		BioTransition* GetTransition( Name ToState, Name NamedTransition );
		void TransitionComplete();
		void OnTransitionDelegate( Name FromState, Name ToState, Bool bCallCPP );
	};

	struct BioStageCameraCustom
	{
		String m_sCameraName; //offset = 0, size = 12
		Float m_fCameraHeightDelta; //offset = 12, size = 4
		Float m_fCameraPitchDelta; //offset = 16, size = 4
		Float m_fCameraYawDelta; //offset = 20, size = 4
		Float m_fCameraFOVDelta; //offset = 24, size = 4
		Float m_fCameraNearPlaneDelta; //offset = 28, size = 4
		Float m_fCameraFocusInnerRadiusDelta; //offset = 32, size = 4
		Float m_fCameraFocusDistanceDelta; //offset = 36, size = 4
		Bool m_bNewHeightAdjust: 1; //offset = 40, size = 4
		Bool m_bDisableHeightAdjust: 1; //offset = 40, size = 4
		Bool m_bDisableListenerAdjust: 1; //offset = 40, size = 4
	};

	class BioStage: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioStage, Actor, SFXGame )

	public:

		Bool Enabled: 1; //offset = 508, size = 4
		Bool m_bDoHeightAdjustment: 1; //offset = 508, size = 4
		Bool m_bLookAtActive: 1; //offset = 508, size = 4
		Bool m_bDOFActive: 1; //offset = 508, size = 4
		SkeletalMeshComponent* Mesh; //offset = 512, size = 4
		BioStageType* Type; //offset = 516, size = 4
		Bool m_bDisableProceduralCameraAdjust: 1; //offset = 520, size = 4
		Bool m_bPositionLocked: 1; //offset = 520, size = 4
		Map_Mirror m_mapPlacement; //offset = 524, size = 20
		Float m_fHeightAdjust; //offset = 544, size = 4
		Float m_fStageZ; //offset = 548, size = 4
		Float m_fSpeakerFeetZ; //offset = 552, size = 4
		Float m_fSpeakerEyeHeight; //offset = 556, size = 4
		Name m_sSpeakerTag; //offset = 560, size = 8
		Name m_sListenerTag; //offset = 568, size = 8
		Vector m_vOldPositon; //offset = 576, size = 12
		Array<BioStageCameraCustom> m_CameraCustomList; //offset = 588, size = 12
		Float m_fCameraHeightDelta; //offset = 600, size = 4
		Float m_fCameraPitchDelta; //offset = 604, size = 4
		Float m_fCameraYawDelta; //offset = 608, size = 4
		Float m_fCameraFOVDelta; //offset = 612, size = 4
		Float m_fCameraNearPlaneDelta; //offset = 616, size = 4
		Float m_fCameraFocusInnerRadiusDelta; //offset = 620, size = 4
		Float m_fCameraFocusDistanceDelta; //offset = 624, size = 4
		Name m_sCurrentCamera; //offset = 628, size = 8

		void ProfileStage( BioHUD* HUD );
		void SetActorToNode( Actor* aInput, Name nmNodeName );
	};

	const char* VERY_SMALL_TIME = 0.000;
	const char* DEBUG_CAMERAS = FAL;
	const char* MAX_DEFAULT_INTIMACY = 75;
	const char* MIN_DEFAULT_INTIMACY = 25;
	const char* BIOCONV_REPLY_NONE = -1;

	enum EConvLightingType
	{
		ConvLighting_Cinematic,
		ConvLighting_Exploration,
	};

	enum EInterruptionType
	{
		INTERRUPTION_RENEGADE,
		INTERRUPTION_PARAGON,
	};

	enum EConvGUIStyles
	{
		GUI_STYLE_NONE,
		GUI_STYLE_CHARM,
		GUI_STYLE_INTIMIDATE,
	};

	enum EReplyCategory
	{
		REPLY_CATEGORY_DEFAULT,
		REPLY_CATEGORY_AGREE,
		REPLY_CATEGORY_DISAGREE,
		REPLY_CATEGORY_FRIENDLY,
		REPLY_CATEGORY_HOSTILE,
	};

	enum EReplyTypes
	{
		REPLY_STANDARD,
		REPLY_AUTOCONTINUE,
	};

	struct BioConvPawnPropData
	{
		Map_Mirror mapMeshPropData; //offset = 0, size = 20
		Map_Mirror mapWeaponPropData; //offset = 20, size = 20
	};

	struct BioConvLightingData
	{
		Float KeyLight_Scale_Red; //offset = 0, size = 4
		Float KeyLight_Scale_Green; //offset = 4, size = 4
		Float KeyLight_Scale_Blue; //offset = 8, size = 4
		Float FillLight_Scale_Red; //offset = 12, size = 4
		Float FillLight_Scale_Green; //offset = 16, size = 4
		Float FillLight_Scale_Blue; //offset = 20, size = 4
		Color RimLightColor; //offset = 24, size = 4
		Float RimLightScale; //offset = 28, size = 4
		Float RimLightYaw; //offset = 32, size = 4
		Float RimLightPitch; //offset = 36, size = 4
		Byte RimLightControl; //offset = 40, size = 1
		Byte LightingType; //offset = 41, size = 1
		Name TargetBoneName; //offset = 44, size = 8
		Float BouncedLightingIntensity; //offset = 52, size = 4
		Float BouncedKeyLightingIntensity; //offset = 56, size = 4
		Float BouncedKeyLightingDesaturation; //offset = 60, size = 4
		Bool bLockEnvironment: 1; //offset = 64, size = 4
		Bool bTriggerFullUpdate: 1; //offset = 64, size = 4
		Bool bUseForNextCamera: 1; //offset = 64, size = 4
	};

	struct BioNextLightingData
	{
		BioConvLightingData tData; //offset = 0, size = 68
		Actor* pActor; //offset = 68, size = 4
		Bool bUseThis: 1; //offset = 72, size = 4
	};

	struct BioInterruptReplyInfo
	{
		Byte eInterruptType; //offset = 0, size = 1
		Bool bEnabled: 1; //offset = 4, size = 4
		Int nReplyListIndex; //offset = 8, size = 4
		Float fWindowStartTimeRemaining; //offset = 12, size = 4
		Float fWindowTimeRemaining; //offset = 16, size = 4
		Bool bActivated: 1; //offset = 20, size = 4
	};

	struct BioSavedActorPos
	{
		Actor* pActor; //offset = 0, size = 4
		Vector vPos; //offset = 4, size = 12
		Rotator rRot; //offset = 16, size = 12
	};

	struct BioNextCamData
	{
		Float fFov; //offset = 0, size = 4
		Vector vPos; //offset = 4, size = 12
		Rotator rRot; //offset = 16, size = 12
		Bool bUseThis: 1; //offset = 28, size = 4
		Float fNearPlane; //offset = 32, size = 4
		Name sCameraName; //offset = 36, size = 8
		BioStageDOFData tDOFData; //offset = 44, size = 12
	};

	struct BioDialogScript
	{
		Name sScriptTag; //offset = 0, size = 8
	};

	struct BioDialogLookat
	{
		Actor* pActor; //offset = 0, size = 4
		Float fLookAtDelay; //offset = 4, size = 4
		Actor* pLookAtTarget; //offset = 8, size = 4
	};

	struct BioDialogSpeaker
	{
		Name sSpeakerTag; //offset = 0, size = 8
		Actor* aSpeaker; //offset = 8, size = 4
	};

	struct BioDialogReplyNode
	{
		Array<Int> EntryList; //offset = 68, size = 12
		Byte ReplyType; //offset = 80, size = 1
		Int nListenerIndex; //offset = 84, size = 4
		Bool bUnskippable: 1; //offset = 88, size = 4
		Bool bIllegal: 1; //offset = 88, size = 4
	};

	struct BioDialogEntryNode
	{
		Array<BioDialogReplyListDetails> ReplyListNew; //offset = 68, size = 12
		Int nSpeakerIndex; //offset = 80, size = 4
		Int nListenerIndex; //offset = 84, size = 4
		Bool bSkippable: 1; //offset = 88, size = 4
		Array<Int> aSpeakerList; //offset = 92, size = 12
	};

	struct BioDialogNode
	{
		srText srText; //offset = 0, size = 4
		String sText; //offset = 4, size = 12
		Bool bFireConditional: 1; //offset = 16, size = 4
		Int nConditionalFunc; //offset = 20, size = 4
		Int nConditionalParam; //offset = 24, size = 4
		Int nStateTransition; //offset = 28, size = 4
		Int nStateTransitionParam; //offset = 32, size = 4
		Int nExportID; //offset = 36, size = 4
		Int nScriptIndex; //offset = 40, size = 4
		Bool bAmbient: 1; //offset = 44, size = 4
		Bool bNonTextLine: 1; //offset = 44, size = 4
		WwiseBaseSoundObject* pCue; //offset = 48, size = 4
		Bool bSoundLoaded: 1; //offset = 52, size = 4
		Byte eGUIStyle; //offset = 56, size = 1
		Int nCameraIntimacy; //offset = 60, size = 4
		Bool bIgnoreBodyGestures: 1; //offset = 64, size = 4
	};

	struct BioDialogReplyListDetails
	{
		Int nIndex; //offset = 0, size = 4
		srParaphrase srParaphrase; //offset = 4, size = 4
		String sParaphrase; //offset = 8, size = 12
		Byte Category; //offset = 20, size = 1
	};

	class BioConversation: public Object
	{
		DECLARE_PACKAGE_CLASS( BioConversation, Object, SFXGame )

	public:

		Array<Int> m_StartingList; //offset = 60, size = 12
		Array<BioDialogEntryNode> m_EntryList; //offset = 72, size = 12
		Array<BioDialogReplyNode> m_ReplyList; //offset = 84, size = 12
		Array<BioDialogSpeaker> m_SpeakerList; //offset = 96, size = 12
		Array<BioDialogLookat> m_LookAtList; //offset = 108, size = 12
		Array<BioDialogScript> m_ScriptList; //offset = 120, size = 12
		Bool m_bOneLinerConversation: 1; //offset = 132, size = 4
		Bool bUseFixedCameras: 1; //offset = 132, size = 4
		Int m_nResRefID; //offset = 136, size = 4
		Int m_nCurrentEntry; //offset = 140, size = 4
		Float m_fStartTime; //offset = 144, size = 4
		Array<Int> m_lstCurrentReplyIndices; //offset = 148, size = 12
		Actor* m_pConversationOwner; //offset = 160, size = 4
		Actor* m_pConversationPlayer; //offset = 164, size = 4
		Actor* m_pSpeaker; //offset = 168, size = 4
		Actor* m_oPreviousSpeaker; //offset = 172, size = 4
		Actor* m_pListener; //offset = 176, size = 4
		Vector vLineOfAction; //offset = 180, size = 12
		Int m_nSelectedReply; //offset = 192, size = 4
		BioSeqAct_StartConversation* m_pKismetStart; //offset = 196, size = 4
		Int m_nCurrentReply; //offset = 200, size = 4
		Bool m_bConversationEnded: 1; //offset = 204, size = 4
		Bool m_bHasAttachedCameraTrack: 1; //offset = 204, size = 4
		Bool m_bHasAttachedDOFTrack: 1; //offset = 204, size = 4
		Bool m_bSkipRequested: 1; //offset = 204, size = 4
		Bool m_bForceUnskippable: 1; //offset = 204, size = 4
		Bool m_bDisplayNonAmbientName: 1; //offset = 204, size = 4
		Bool m_bSkipProtectionDisabled: 1; //offset = 204, size = 4
		Bool m_bAmbient: 1; //offset = 204, size = 4
		Bool m_bPutPlayerIntoCombat: 1; //offset = 204, size = 4
		Bool m_bDisableTargeting: 1; //offset = 204, size = 4
		Bool m_bSkippable: 1; //offset = 204, size = 4
		Bool m_bFailed: 1; //offset = 204, size = 4
		Bool m_bInterrupted: 1; //offset = 204, size = 4
		Bool m_bKismetInitiated: 1; //offset = 204, size = 4
		Bool m_bConversationOver: 1; //offset = 204, size = 4
		Bool m_bEnableLookAtWithStage: 1; //offset = 204, size = 4
		Bool m_bPlayerIsFemale: 1; //offset = 204, size = 4
		Bool m_bNoGestures: 1; //offset = 204, size = 4
		Bool m_bForceShowReplies: 1; //offset = 204, size = 4
		Bool m_bCleanupNeeded: 1; //offset = 204, size = 4
		Bool m_bEarlyTermination: 1; //offset = 204, size = 4
		Bool m_bRemoveWeapons: 1; //offset = 204, size = 4
		Bool m_bPlayingNonTextLine: 1; //offset = 204, size = 4
		Bool m_bNextLinePreLoadEnabled: 1; //offset = 204, size = 4
		Bool m_bPlayerSexIsValid: 1; //offset = 204, size = 4
		Bool m_bVerifyPreLoadingCorrectness: 1; //offset = 204, size = 4
		Bool m_bAutoAdvanceSkippableLinesWithNoVO: 1; //offset = 204, size = 4
		Int m_intimacy; //offset = 208, size = 4
		BioStage* m_stage; //offset = 212, size = 4
		String m_sAreaCode; //offset = 216, size = 12
		Float m_fShowRepliesOffset; //offset = 228, size = 4
		Float m_fShowLastLineOffset; //offset = 232, size = 4
		Float m_fNodePlayTimer; //offset = 236, size = 4
		BioInterruptReplyInfo m_tInterruptInfo; //offset = 240, size = 24
		Float m_fInterruptRange; //offset = 264, size = 4
		BioNextCamData m_tNextCamOverride; //offset = 268, size = 56
		BioNextLightingData m_tNextLightingOverride; //offset = 324, size = 76
		Array<BioSavedActorPos> m_aFSPrevPositions; //offset = 400, size = 12
		Float m_fSubtitleTimingModifier; //offset = 412, size = 4
		Float m_fSubtitleTimingMinimum; //offset = 416, size = 4
		Float m_fVOPreloadDelayTime; //offset = 420, size = 4
		Int m_nNodeStateFlags; //offset = 424, size = 4
		String m_sCurrentSubTitle; //offset = 428, size = 12
		WwiseBaseSoundObject* m_pCurrentSound; //offset = 440, size = 4
		String m_sCurrentFaceFXAnim; //offset = 444, size = 12
		Float m_fRemainingVOLength; //offset = 456, size = 4
		Float m_fRemainingLastLineSubtitleDelay; //offset = 460, size = 4
		Int m_nDelayedReplyChoice; //offset = 464, size = 4
		Map_Mirror m_mapPawnProps; //offset = 468, size = 20
		BioTlkSet TalkTables; //offset = 488, size = 8
		Sequence* MatineeSequence; //offset = 496, size = 4
		Sequence* m_pPIEEvtSysSeq; //offset = 500, size = 4
		FaceFXAnimSet* FaceFXSet; //offset = 504, size = 4
		Array<FaceFXAnimSet*> m_aMaleFaceSets; //offset = 508, size = 12
		Array<FaceFXAnimSet*> m_aFemaleFaceSets; //offset = 520, size = 12
		FaceFXAnimSet* m_pNonSpeakerFaceFXSet; //offset = 532, size = 4
		Array<WwiseBaseSoundObject*> m_aMaleSoundObjects; //offset = 536, size = 12
		Array<WwiseBaseSoundObject*> m_aFemaleSoundObjects; //offset = 548, size = 12
		Color m_colSubtitleColor; //offset = 560, size = 4
		Float m_fAudioHitchBuffer; //offset = 564, size = 4
		WwiseBaseSoundObject* m_pPreLoadingSoundCue; //offset = 568, size = 4
		Float m_fPreLoadTimer; //offset = 572, size = 4
		Array<Int> m_aPreLoadNodesVisited; //offset = 576, size = 12
		Float m_fPreLoadStartDelay; //offset = 588, size = 4
		m_srPreLoadedStrRef m_srPreLoadedStrRef; //offset = 592, size = 4
		Array<BioPawn*> m_aExtraParticipants; //offset = 596, size = 12
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_CachedLightingState; //offset = 608, size = 20
		Float m_fDefaultInterruptWindowDuration; //offset = 628, size = 4
		Float m_fDefaultInterruptWindowStart; //offset = 632, size = 4
		Int m_nTeleLinesHit; //offset = 636, size = 4
		Int m_nTeleLinesSkipped; //offset = 640, size = 4
		Float m_fTeleAverageSkipTime; //offset = 644, size = 4

		void DisableCamera( Bool bDisableCamera, Pawn* Pawn );
		Bool SelectInterruption();
		Bool NeedToDisplayInterrupt();
		void SetCustomInterruptWindow( Float fStart, Float fDuraton );
		void EnableCustomInterruptWindow();
		Bool TickInterruptionData( Float fDelta );
		void MissingLipSync();
		void MissingVO();
		Byte GetReplyGUIStyle( Int nIndex );
		Bool FinishEntryNode( Int nEntryIndex );
		Bool NeedToDisplayReplies();
		void StopScript( String Script );
		Int GetReplyExportID( Int nIndex );
		Int GetReplyCategory( Int nIndex );
		String GetReplyParaphraseText( Int nIndex );
		String GetReplyText( Int nIndex, Bool bParse );
		String GetEntryText( Bool bParse );
		Actor* GetSpeaker( Int nIndex );
		void UpdateFacing();
		void UpdateLookAtTargets( Float fDeltaT );
		void UpdateLookAtList( BioPawn* pBioPawn );
		void switchToAmbient( Bool bWasNonAmbient );
		Bool IsAmbient();
		Bool WaitingForReply();
		Bool SkipNode();
		Bool FinishSelectedReply();
		Bool QueueReply( Int nReply );
		Bool SelectReply( Int nReply );
		Bool UpdateConversation( Float fDeltaT );
		void EndConversation();
		Bool StartConversation( Actor* aOwner, Actor* aPlayer );
		Actor* GetConversationObject( Int nObjectIndex, Bool bNoisyErrors );
		void SetPositionRotator( Actor* pActor, Vector Position, Rotator facing );
	};

	struct BioTlkSet
	{
		BioTlkFile* Male; //offset = 0, size = 4
		BioTlkFile* Female; //offset = 4, size = 4
	};

	class BioTlkFile: public BioBaseTlkFile
	{
		DECLARE_PACKAGE_CLASS( BioTlkFile, BioBaseTlkFile, SFXGame )

	public:
	};

	const char* MAX_SIZE_PERCENT = 0.7;

	struct CanvasProperties
	{
		Font* m_font; //offset = 0, size = 4
		Int m_nCurX; //offset = 4, size = 4
		Int m_nCurY; //offset = 8, size = 4
		Int m_nOrgX; //offset = 12, size = 4
		Int m_nOrgY; //offset = 16, size = 4
		Int m_nClipX; //offset = 20, size = 4
		Int m_nClipY; //offset = 24, size = 4
		Color m_color; //offset = 28, size = 4
	};

	class BioGUIBox: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGUIBox, Object, SFXGame )

	public:

		Color m_colorBackground; //offset = 60, size = 4
		Color m_colorForeground; //offset = 64, size = 4
		CanvasProperties m_canvasProperties; //offset = 68, size = 32
		Int m_nCanvasWidth; //offset = 100, size = 4
		Int m_nCanvasHeight; //offset = 104, size = 4
		Float m_fX; //offset = 108, size = 4
		Float m_fY; //offset = 112, size = 4
		Float m_fWidth; //offset = 116, size = 4
		Float m_fHeight; //offset = 120, size = 4
		Font* m_font; //offset = 124, size = 4
		Bool m_bComputeDrawParameters: 1; //offset = 128, size = 4

		void Draw( Canvas* oCanvas );
		void SetFont( Font* Font );
		void PopCanvasProperties( Canvas* oCanvas );
		void PushCanvasProperties( Canvas* oCanvas );
		void RenderContent( Canvas* oCanvas );
		void ComputeDrawParameters( Canvas* oCanvas );
		Bool ShouldRender();
	};

	class BioDebugMenu: public BioGUIBox
	{
		DECLARE_PACKAGE_CLASS( BioDebugMenu, BioGUIBox, SFXGame )

	public:

		Color m_colorSelected; //offset = 132, size = 4
		Int m_nSelectedEntry; //offset = 136, size = 4
		Int m_nScrollPosition; //offset = 140, size = 4
		Int m_nMaxScrollPosition; //offset = 144, size = 4
		Int m_nLineCount; //offset = 148, size = 4
		Array<String> m_aMenuEntries; //offset = 152, size = 12

		void ScrollUp();
		void ScrollDown();
		void RenderContent( Canvas* oCanvas, Int I );
		void ComputeDrawParameters( Canvas* oCanvas, Float fTextHeight, Float fMaxWidth, Float fMaxHeight, Float fWidth, Int I );
		Bool ShouldRender();
		void Clear();
		void AddEntry( String sMenuEntry );
	};

	class BioMessageBox: public BioGUIBox
	{
		DECLARE_PACKAGE_CLASS( BioMessageBox, BioGUIBox, SFXGame )

	public:

		Array<String> m_aRawText; //offset = 132, size = 12
		Array<String> m_aWrappedText; //offset = 144, size = 12
		Int m_nScrollPosition; //offset = 156, size = 4
		Int m_nLineCount; //offset = 160, size = 4
		Int m_nMaxScrollPosition; //offset = 164, size = 4
		Float StartDrawTime; //offset = 168, size = 4

		void PageUp();
		void PageDown();
		void ScrollUp();
		void ScrollDown();
		void RenderContent( Canvas* oCanvas, Int I );
		Bool HasText(, Int I );
		void SetTextArray( Array<String> aText );
		void SetText( String S );
		Bool ShouldRender();
		void ComputeDrawParameters( Canvas* oCanvas, Float fTextHeight, Float fTextWidth, Float fMaxWidth, Float fMaxHeight, Int I );
	};

	class BioMoviePlayer: public Object
	{
		DECLARE_PACKAGE_CLASS( BioMoviePlayer, Object, SFXGame )

	public:

		Material* m_material; //offset = 60, size = 4
		TextureMovie* m_textureMovie; //offset = 64, size = 4
		__OnMovieFinished__Delegate __OnMovieFinished__Delegate; //offset = 68, size = 12

		void ShutdownMovie();
		void Draw( Canvas* Canvas );
		void SetMaterial( Material* Material, MaterialExpressionTextureSample* textureSample );
		void SetTextureMovie( TextureMovie* TextureMovie, MaterialExpressionTextureSample* textureSample );
		void InitializeMovie();
		void OnMovieFinished( TextureMovie* TextureMovie );
	};

	const char* HUD_SEGMENTS = 64.;

	class BioHUD: public HUD
	{
		DECLARE_PACKAGE_CLASS( BioHUD, HUD, SFXGame )

	public:

		Array<DebugDrawList> DebugDrawList; //offset = 1152, size = 12
		BioMessageBox* m_messageBox; //offset = 1164, size = 4
		BioDebugMenu* m_oDebugMenu; //offset = 1168, size = 4
		BioMoviePlayer* m_moviePlayer; //offset = 1172, size = 4
		Bool m_bShowPlayerLocation: 1; //offset = 1176, size = 4
		Bool bDisplaySafeArea: 1; //offset = 1176, size = 4
		Bool bFontTest: 1; //offset = 1176, size = 4
		Bool m_bDisplayActorInfo: 1; //offset = 1176, size = 4
		Bool m_bLockActorInfo: 1; //offset = 1176, size = 4
		Bool m_bShowCover: 1; //offset = 1176, size = 4
		Bool m_bShowCoverRotation: 1; //offset = 1176, size = 4
		Bool m_bShowCoverNames: 1; //offset = 1176, size = 4
		Bool bDisplayingSave: 1; //offset = 1176, size = 4
		Bool m_bGUIResourcesLoaded: 1; //offset = 1176, size = 4
		Bool m_bUseGeneratedItemNames: 1; //offset = 1176, size = 4
		Actor* m_oActorForInfoDisplay; //offset = 1180, size = 4
		Float m_fNextTimeToShowCover; //offset = 1184, size = 4
		Material* oGUIMaterial; //offset = 1188, size = 4
		Float m_fCanvasOrgX; //offset = 1192, size = 4
		Float m_fCanvasOrgY; //offset = 1196, size = 4
		Float SafeAreaRatioX; //offset = 1200, size = 4
		Float SafeAreaRatioY; //offset = 1204, size = 4
		Int nFontTestType; //offset = 1208, size = 4
		Float m_fSafeXOffset; //offset = 1212, size = 4
		Float m_fSafeYOffset; //offset = 1216, size = 4
		Int m_textX; //offset = 1220, size = 4
		Int m_textY; //offset = 1224, size = 4
		Int m_lineHeight; //offset = 1228, size = 4
		Int m_charWidth; //offset = 1232, size = 4
		Int m_leftColumnX; //offset = 1236, size = 4
		Int m_rightColumnX; //offset = 1240, size = 4
		Int m_farrightColumnX; //offset = 1244, size = 4
		Int m_topRowY; //offset = 1248, size = 4
		Float LastSaveStartTime; //offset = 1252, size = 4
		Float LastSaveEndTime; //offset = 1256, size = 4
		Color YellowColor; //offset = 1260, size = 4
		Color OrangeColor; //offset = 1264, size = 4
		Color DarkGreyColor; //offset = 1268, size = 4
		Texture2D* SafeAreaTexture; //offset = 1272, size = 4
		MaterialInstanceConstant* m_oTargetDetected; //offset = 1276, size = 4
		__DebugDraw__Delegate __DebugDraw__Delegate; //offset = 1280, size = 12

		Bool IsFinalReleaseBuild();
		void DisplayNavWeight( Actor* ProfileTarget, NavigationPoint* Nav, Vector ScreenCoords, Float X, Float Y, Float YL, Vector CamLoc, Rotator CamRot, Color CurrentColor );
		void DrawAngstIcon( Actor* oActor, Vector ScreenCoords, Float X, Float Y, Float YL, Vector CamLoc, Rotator CamRot );
		void ShowReachSpecs( Name nmNavigationPoint, NavigationPoint* oNavPoint, Int nIndex, ReachSpec* oReachSpec );
		void DisplayRouteInfo( Pawn* pPawn, Color PathColor, Bool bDrawPathOnly );
		void UpdateCoverNames( BioWorldInfo* oWorldInfo, SFXPlayerCamera* oCameraManager, Vector vCameraLocation, Vector vCameraRotation, CoverLink* oCoverLink, Vector vLocation, Vector vDirection, CoverSlotMarker* oCoverSlotMarker, String sText, Pawn* oSlotOwner );
		void ShowCoverNames();
		void UpdateCover( Bool bShowRotation );
		void ShowCover( Bool bShowRotation );
		void UpdateActorInfo( BioPlayerController* oPlayerController, Actor* oActor, Vector vHitLocation, Vector vHitNormal, Float fGuiAlpha, Float fX, Float fY, BioPawn* oPawn );
		void HideLocation();
		void ShowLocation();
		void SetActorForActorInfo( Name nmActor, Actor* oActor );
		void LockActorInfo( Actor* oActor, Vector vHitLocation, Vector vHitNormal );
		void DisplayActorInfo();
		void LoadGUIResources();
		void SetGUITexture( String sMaterial );
		void DrawTextWithColor( String valuename, String Value, Color LabelColor, Color DataColor, Float strX, Float dummyStrY, Float Alpha );
		void DrawText( String valuename, String Value, Color LabelColor, Color DataColor );
		void DrawCircle( Float fX, Float fY, Float Radius, Int idx, Float X1, Float Y1, Float X2, Float Y2, Float XPos, Float YPos );
		void CDrawSquare( Int nSize, Int X, Int Y );
		Bool PointInsideBox( Float X, Float Y, Float CX, Float CY, Float nSize );
		void GetBoxCoordsFromAngle( Float X, Float Y, Float Size, Float Angle, Float XSt, Float YSt );
		Bool BoxesIntersecting( Int X1, Int Y1, Int nSize1, Int X2, Int Y2, Int nSize2, Int nXT, Int nYT, Int nST );
		void CDrawVertLine( Float X, Float Y1, Float Y2 );
		void CDrawHorzLine( Float X1, Float X2, Float Y );
		void ConnectBoxes( Float X1, Float Y1, Float nSize1, Float X2, Float Y2, Float nSize2, Float fAngle, Float fAngleInv, Float X2Start, Float Y2Start, Float X1Start, Float Y1Start );
		String LoadTestTextStringFromFile();
		Float SmartWrapStringToArray( String sText, Array<String> OutArray, Int nTextWidth, Float fontWidth, Float fontHeight, Float textWidth, Float textHeight, Int dlines );
		void DrawFakeShadowText( Int X, Int Y, Color DrawColor, String sText, Float fGuiAlpha );
		void DrawEngineHUD();
		void DebugDraw( BioHUD* H );
		Bool IsDrawing( DebugDrawFunc DebugDrawFunc, Int idx );
		void SetDebugDraw( DebugDrawFunc DebugDrawFunc, Int idx );
		void DrawDebugCrossHair( Float Inaccuracy, Color White );
		void DrawSelection( Vector TargetLocation, BioPlayerController* PC, SFXSelectionModule* SelMod, SFXSimpleUseModule* UseMod, Bool bInRange, BioPawn* BP, MaterialInstanceConstant* MIC, Float Size );
		void DrawHUD( BioCheatManager* CheatManager, Int idx );
		void PostRender( BioPlayerController* PlayerCtrl, Float fOldCanvasOrgX, Float fOldCanvasOrgY, Float fGuiAlpha, String sLocation, BioWorldInfo* oBioWorldInfo );
		void DoFontTest( String sFontName, String sTestString, Texture2D* oTexture );
		void DrawTestFontString( Int Y, String sFontName, String sTestString, Font* oFont );
		void DrawTestFont( Int Y, String sFontName, Int nPoint, Bool bScaled, Float fScale, Font* oFont, String Str );
		void ToggleSafeArea();
		void DisplaySafeArea();
		void ProfileConversationExtra( BioConversation* oCurConv, BioStage* stg, LocalPlayer* pLocalPlayer );
		Vector ProxyCanvasProject( Vector V );
		void ProxyCanvasDrawMaterialTile( MaterialInstanceConstant* Mat, Float XL, Float YL );
		void ProxyCanvasSetPos( Float X, Float Y );
		LinearColor ProxyMakeLinearColor( Float R, Float G, Float B, Float A );
		void ViewportDeProject( LocalPlayer* LocalPlayerOwner, Vector ScreenLocation, Vector OutLocation, Vector OutDirection );
		Int DisplaySquadMember( Int X, Int Y, BioPawnBehavior* targetBehavior, BioPawn* oBP );
		Int DisplaySquad_QA( Int X, Int Y, BioPawnBehavior* targetBehavior );
		Int DisplayStateStack( Int X, Int Y, BioAiController* oController );
		Name GetNameOfEnumEntry( Int nIndex, String EnumName );
		void DisplayIcon( MaterialInstanceConstant* oMatInstance, Vector vWorldLocation, Bool bScaleWithDistance, Float fMinTextureSize, Float fMaxTextureSize, Float fScaleRange );
		void ProfileDesignBudgetGeneral();
		void ProfileLookAt( BioActorBehavior* targetActorBehavior );
		void ProfileCover( BioActorBehavior* targetActorBehavior );
		void ProfileAnim( BioActorBehavior* targetActorBehavior );
		void ProfileGestures( BioActorBehavior* targetActorBehavior );
		void ProfileConversation( BioActorBehavior* targetActorBehavior );
		void ProfileConversationBug( BioActorBehavior* targetActorBehavior );
	};

	enum ESubtitlesRenderMode
	{
		SUBTITLE_RENDER_NONE,
		SUBTITLE_RENDER_DEFAULT,
		SUBTITLE_RENDER_TOP,
		SUBTITLE_RENDER_BOTTOM,
	};

	class BioSubtitles: public Object
	{
		DECLARE_PACKAGE_CLASS( BioSubtitles, Object, SFXGame )

	public:

		String m_sSubtitle; //offset = 60, size = 12
		Color m_FontColor; //offset = 72, size = 4
		Bool m_bAlert: 1; //offset = 76, size = 4
		Byte m_DefaultRenderMode; //offset = 80, size = 1
		Byte m_CurrentRenderMode; //offset = 81, size = 1
		Float m_fTimeRemaining; //offset = 84, size = 4

		void UpdateSubtitles( Float fDeltaT );
		void PrivateUpdateSubtitles( Float fDeltaT );
		Bool GetAlert();
		void SetAlert( Bool bAlert );
		Color GetFontColor();
		void SetFontColor( Color oColor );
		String GetSubtitle();
		void SetSubtitle( String strSubtitle );
		void ClearHistory();
		Byte SetRenderMode( Byte RenderMode, Bool bForceDisplay );
		Byte GetRenderMode();
		Bool HasSubtitle();
		void DisplaySubtitle( String sSubtitle, Float fDuration );
	};

	const char* UIWORLD_FLAG_SpawnHidden = 8;
	const char* UIWORLD_FLAG_DisableCollision = 4;
	const char* UIWORLD_FLAG_HideScar = 2;
	const char* UIWORLD_FLAG_HideHeadGear = 1;

	struct AppliedVFXPair
	{
		BioPawn* Target; //offset = 0, size = 4
		BioVisualEffect* Effect; //offset = 4, size = 4
	};

	class BioUIWorld: public Object
	{
		DECLARE_PACKAGE_CLASS( BioUIWorld, Object, SFXGame )

	public:

		String m_sMapFile; //offset = 60, size = 12
		Name m_fnCameraActorName; //offset = 72, size = 8
		Bool m_bEnabled: 1; //offset = 80, size = 4
		BioConvLightingData m_CustomLightingData; //offset = 84, size = 68
		Bool m_bLoaded: 1; //offset = 152, size = 4
		Pointer m_pWorld; //offset = 156, size = 4
		CameraActor* m_pCameraActor; //offset = 160, size = 4
		Array<Pointer> m_aCommandQueue; //offset = 164, size = 12
		Pointer m_pCriticalSection; //offset = 176, size = 4
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_mSpawnedPawnMap; //offset = 180, size = 20
		Array<AppliedVFXPair> m_AppliedVFX; //offset = 200, size = 12
		Array<Actor*> m_aoInitialActors; //offset = 212, size = 12
		BioVFXTemplate* m_pFullBioticEffectTemplate; //offset = 224, size = 4
		BioVFXTemplate* m_pHalfBioticEffectTemplate; //offset = 228, size = 4
		BioVFXTemplate* m_pTechToolEffectTemplate; //offset = 232, size = 4
		BioVisualEffect* m_pFullBioticEffect; //offset = 236, size = 4
		BioVisualEffect* m_pHalfBioticEffect; //offset = 240, size = 4
		BioVisualEffect* m_pTechToolEffect; //offset = 244, size = 4
		BioSFHandler_NewCharacter* m_oNCHandler; //offset = 248, size = 4
		PostProcessSettings m_CurrentPostProcessSettings; //offset = 252, size = 144
		PostProcessChain* m_PostProcessChain; //offset = 396, size = 4

		void ClearScarFromPawn( BioPawn* PawnToClear, SFXPawn_Player* PlayerPawn );
		void RotatePawn( BioPawn* a_pOriginalPawn, Rotator a_newRot );
		BioPawn* GetSpawnedPawn( BioPawn* a_pOriginalPawn );
		void FlushPendingCommands();
		void HidePawn( BioPawn* a_pOriginalPawn, Bool bHidden );
		void SetAnimSet( BioPawn* SourcePawn, AnimSet* AnimSet );
		void ClearVFX( BioPawn* SourcePawn );
		void ApplyVFXTemplate( BioPawn* SourcePawn, BioVFXTemplate* Template );
		void AttachOmnitool( BioPawn* a_pSourcePawn, Bool a_fnClassName );
		void PrimeTextures( BioPawn* a_pSourcePawn );
		void AttachBioticsAndTech( BioPawn* a_pSourcePawn, Name a_fnClassName );
		void MovePawn( BioPawn* a_pOriginalPawn, Name a_fnNewLocation );
		void SwapPawn( BioPawn* a_pSourcePawn, Name a_fnSourceVarName, BioPawn* a_pOtherPawn, Name a_fnOtherVarName );
		void ResetActors();
		void SetBoolVariable( Name a_fnVariableName, Bool a_bValue );
		void SetNameVariable( Name a_fnVariableName, Name a_nmValue );
		void SetObjectVariable( Name a_fnVariableName, Object* a_pValue );
		void UpdateHeadGearVisibility( BioPawn* pOriginalPawn );
		void UpdateAppearance( BioPawn* a_pOriginalPawn, AnimSet* a_AnimSet, Int a_Flags );
		void DestroyPawn( BioPawn* a_pOriginalPawn );
		void SpawnPawn( BioPawn* a_pOriginalPawn, Name a_fnSpawnLocation, Name a_fnSpawnVariable, AnimSet* InAnimSet, Name a_fnRemoteEvent, Int a_Flags );
		void TriggerEvent( Name a_fnEventName, Actor* a_pCaller );
	};

	const char* breakChars = " .()=';


	class SFXConsole: public Console
	{
		DECLARE_PACKAGE_CLASS( SFXConsole, Console, SFXGame )

	public:
		struct Open
		{
			/*
			EndState
			BeginState
			PostRender_Console
			InputKey
			InputChar
			*/
		};

		struct Typing
		{
			/*
			EndState
			BeginState
			PostRender_Console
			InputKey
			InputChar
			*/
		};

		Bool bShift: 1; //offset = 404, size = 4

		String RetrieveClipboard();
		Int FindBreak( String CurrentString, Int CurrentStringPos, Bool bForward, Int breakCharsLen, String si, String sj, Int I, Int J, Int Start, Int Limit, Int increment );
		Bool FindNextMatchingHistory( Int outNextHistory, String CurrentString, Int CurrentStringPos, String LeftCurrentString, String LeftHistoryString, Int Top, Int bot, Int I );
		Bool CommonInputKey( Int ControllerId, Name Key, Byte Event, Float AmountDepressed, Bool bGamepad, String CopyOfTypedStr, Int CopyOfTypedStrPos, Int NextHistory );
		void FindNextMatchingAutoComplete( String CurrentString, Int CurrentStringPos, Array<String> Pieces, String Token, String ClassName, String PropertyName, String Prefix, String outputstring, Int PrefixBegin, Int PrefixEnd, Class* SearchClass, Object* TestObj );
		Object* FindObjectUnqualified( String ObjectName, Class* ObjectClass );
		String FindNextPropertyMatching( Class* C, String PropertyPrefix, String AfterThisProperty );
		Bool InputChar( Int ControllerId, String Unicode );
		void SaveHistory();
		void LoadHistory();
		Bool InputKey( Int ControllerId, Name Key, Byte Event, Float AmountDepressed, Bool bGamepad );
		void PostRender_Console( Canvas* Canvas );
		void StartTyping( String Text );
		void ClearOutput();
		void ConsoleCommand( String Command );
		String PreParseCommand( String Command, Array<String> Pieces, String Token, String outputstring, Int I );
		Actor* GetCameraActor(, Actor* HitActor, Vector HitLocation, Vector HitNormal );
		void PurgeCommandFromHistory( String Command, Int Count, Int I, Int idx, Int J, Int jdx, Int kdx );
		void Initialized();
	};

	class BioActorFactory: public ActorFactory
	{
		DECLARE_PACKAGE_CLASS( BioActorFactory, ActorFactory, SFXGame )

	public:

		BioActorType* m_oActorType; //offset = 100, size = 4
		BioActorType* ActorType; //offset = 104, size = 4
		Bool bEnableInitialVelocity: 1; //offset = 108, size = 4
		Bool bLocalSpaceInitialVelocity: 1; //offset = 108, size = 4
		Bool BakeActorResources: 1; //offset = 108, size = 4
		Vector InitialVelocity; //offset = 112, size = 12
		DistributionVector* AdditionalVelocity; //offset = 124, size = 4
		DistributionVector* InitialAngularVelocity; //offset = 128, size = 4
		Byte RBChannel; //offset = 132, size = 1
		Array<Object*> ActorResourceCollection; //offset = 136, size = 12
	};

	class BioTrigger: public Trigger
	{
		DECLARE_PACKAGE_CLASS( BioTrigger, Trigger, SFXGame )

	public:

		Bool Enabled: 1; //offset = 520, size = 4
		Bool OneShot: 1; //offset = 520, size = 4

		void UnTouch( Actor* Other );
		void Touch( Actor* Other, PrimitiveComponent* OtherComp, Vector HitLocation, Vector HitNormal );
	};

	enum BioQuestEventTypes
	{
		QET_New,
		QET_Updated,
	};

	enum BioNoticeContexts
	{
		NOTICE_CONTEXT_JOURNAL,
		NOTICE_CONTEXT_CODEX,
		NOTICE_CONTEXT_INVENTORY,
		NOTICE_CONTEXT_PARTYLEVEL,
		NOTICE_CONTEXT_XP,
		NOTICE_CONTEXT_MEDIGEL,
		NOTICE_CONTEXT_SALVAGE,
	};

	enum BioNoticeIcons
	{
		NOTICE_ICON_UNASSIGNED = 1,
		NOTICE_ICON_QUEST_UPDATE,
		NOTICE_ICON_LEVELUP,
		NOTICE_ICON_DEFICIENCY,
		NOTICE_ICON_XP,
		NOTICE_ICON_PARAGON,
		NOTICE_ICON_RENEGADE,
		NOTICE_ICON_OMNITOOL,
		NOTICE_ICON_BIOAMP,
		NOTICE_ICON_XMOD,
		NOTICE_ICON_CODEX_ADDED,
		NOTICE_ICON_COIN,
	};

	enum BioNoticeDisplayTypes
	{
		NOTICE_TYPE_DELTA,
		NOTICE_TYPE_TEXT,
		NOTICE_TYPE_QUANTITY,
	};

	struct BioTalentNotice
	{
		Int nIcon; //offset = 0, size = 4
		String sName; //offset = 4, size = 12
		BioPawn* oCharacter; //offset = 16, size = 4
	};

	struct BioDisplayNotice
	{
		Int nEventType; //offset = 0, size = 4
		Int nTimeToLive; //offset = 4, size = 4
		Int nIconIndex; //offset = 8, size = 4
		Int nContext; //offset = 12, size = 4
		srTitle srTitle; //offset = 16, size = 4
		String strTitle; //offset = 20, size = 12
		Int nQuantity; //offset = 32, size = 4
		Int nQuantMin; //offset = 36, size = 4
		Int nQuantMax; //offset = 40, size = 4
	};

	class BioEventNotifier: public Object
	{
		DECLARE_PACKAGE_CLASS( BioEventNotifier, Object, SFXGame )

	public:

		Array<BioDisplayNotice> m_lstNotices; //offset = 60, size = 12
		Bool m_bNoticesNotarized: 1; //offset = 72, size = 4
		Bool m_bEnabled: 1; //offset = 72, size = 4
		Bool m_bTalentNoticeReady: 1; //offset = 72, size = 4
		Bool m_bHUDAcknowledgedTalentNotify: 1; //offset = 72, size = 4
		Array<BioTalentNotice> m_lstTalentNotices; //offset = 76, size = 12
		BioSFHandler_MessageBox* m_oTalentNotifyBoxHandler; //offset = 88, size = 4
		srTalentOk srTalentOk; //offset = 92, size = 4
		srTalentSkipRemainder srTalentSkipRemainder; //offset = 96, size = 4
		srLevelUp srLevelUp; //offset = 100, size = 4
		srQuestAdded srQuestAdded; //offset = 104, size = 4
		srQuestUpdated srQuestUpdated; //offset = 108, size = 4
		srQuestCompleted srQuestCompleted; //offset = 112, size = 4
		srCodexEntry srCodexEntry; //offset = 116, size = 4
		srParagonReceived srParagonReceived; //offset = 120, size = 4
		srRenegadeReceived srRenegadeReceived; //offset = 124, size = 4
		srMedigel srMedigel; //offset = 128, size = 4
		srSalvage srSalvage; //offset = 132, size = 4
		srMap srMap; //offset = 136, size = 4
		srAbility srAbility; //offset = 140, size = 4
		Int nParagonPlotVar; //offset = 144, size = 4
		Int nRenegadePlotVar; //offset = 148, size = 4
		Int nWwiseMusicVolumeRTPCPlotVar; //offset = 152, size = 4
		String sWwiseMusicVolumeRTPCName; //offset = 156, size = 12
		Float fPassivePopupDisplayTime; //offset = 168, size = 4
		String sWwiseParaReneRTPCName; //offset = 172, size = 12
		Bool bDissableTallentNotifications: 1; //offset = 184, size = 4
		Bio2DA* oPlotIntTalent2DA; //offset = 188, size = 4

		void RemoveTalentNotify( BioPawn* oCharacter );
		void AddTalentNotifyStringRef( Int nTalentIcon, srTalentName srTalentName, BioPawn* pPawn );
		void AddTalentNotifyString( Int nTalentIcon, String sTalentName, BioPawn* pPawn );
		void OnTalentNoticeInput( Bool bAPressed, Int nContext );
		Bool PendingTalentNotify( BioPawn* oCharacter );
		void ShowTalentNotify( BioPawn* oCharacter );
		void AddNotice( Int nType, Int nContext, Int nTimeToLive, Int nIconIndex, srTitle srTitle, String strTitle, Int nQuantity, Int nQuantMin, Int nQuantMax );
		void NotarizeNotices();
		void HasListChanged();
		void RetrieveNotices( Array<BioDisplayNotice> lstNotices );
	};

	class BioSFScreenTip: public Object
	{
		DECLARE_PACKAGE_CLASS( BioSFScreenTip, Object, SFXGame )

	public:

		Int IconID; //offset = 60, size = 4
		Default_Title Default_Title; //offset = 64, size = 4
		Default_Body Default_Body; //offset = 68, size = 4
		PC_Title PC_Title; //offset = 72, size = 4
		PC_Body PC_Body; //offset = 76, size = 4
		PS3_Title PS3_Title; //offset = 80, size = 4
		PS3_Body PS3_Body; //offset = 84, size = 4
	};

	enum ESFXLocomotionState
	{
		eSFXLocomotionState_Inactive,
		eSFXLocomotionState_Moving,
		eSFXLocomotionState_Idle,
		eSFXLocomotionState_MoveStart,
	};

	class SFXModule_Locomotion: public SFXModule
	{
		DECLARE_PACKAGE_CLASS( SFXModule_Locomotion, SFXModule, SFXGame )

	public:

		BioPawn* Pawn; //offset = 68, size = 4
		AnimNode* AnimNode; //offset = 72, size = 4
		Byte CurrentState; //offset = 76, size = 1
		Int StateTag; //offset = 80, size = 4
		Int TickTag; //offset = 84, size = 4
		Rotator PawnDesiredRotation; //offset = 88, size = 12
		Vector PawnAcceleration; //offset = 100, size = 12
		Float PawnMoveStartFwdAngle; //offset = 112, size = 4
		Float PawnMoveStartFwdSpeed; //offset = 116, size = 4
		Float PawnMoveStartFwdAccelerationTimer; //offset = 120, size = 4
		Float PawnMoveStartSidewayAccelerationTimer; //offset = 124, size = 4
		Float PawnMoveStartStopTimerThreshold; //offset = 128, size = 4
		Float PawnMoveStandTurnDistanceThreshold; //offset = 132, size = 4
		Float PawnMoveStandTurnRotRate; //offset = 136, size = 4
		Float PawnMoveStopTimerThreshold; //offset = 140, size = 4
		Float PawnMoveStopRestartTimerThreshold; //offset = 144, size = 4
		Float StateTimer; //offset = 148, size = 4
		Float StateSpeed; //offset = 152, size = 4
		Float MovingLeanYaw[2]; //offset = 156, size = 4
		Float MovingLean; //offset = 164, size = 4
		Float MovingIncline; //offset = 168, size = 4
		Float MoveStartInitialYaw; //offset = 172, size = 4
		Vector MoveStartInitialPos; //offset = 176, size = 12
		Float MoveStartRelYaw; //offset = 188, size = 4
		Float MoveStartLastYaw; //offset = 192, size = 4
		Float MoveStartIdleTimer; //offset = 196, size = 4
		Bool MoveStartStopping: 1; //offset = 200, size = 4

		void SetAcceleration( Vector Acceleration );
		void SetDesiredRotation( Rotator DesiredRotation );
	};

	class SFXProjectile_Trajectory: public Projectile
	{
		DECLARE_PACKAGE_CLASS( SFXProjectile_Trajectory, Projectile, SFXGame )

	public:

		void Explode( Vector HitLocation, Vector HitNormal );
		void HitWall( Vector HitNormal, Actor* Wall, PrimitiveComponent* WallComp );
		void Destroyed();
		void Tick( Float DeltaTime );
		void PostBeginPlay( ParticleSystemComponent* PSC );
		void RunPhysicsSimulationTilEnd( Float GrenadeLifeSpan );
	};

	class SFXWeapon_NativeBase: public Weapon
	{
		DECLARE_PACKAGE_CLASS( SFXWeapon_NativeBase, Weapon, SFXGame )

	public:

		Bool bWeaponExpanded: 1; //offset = 744, size = 4
		Bool bInstantExpansion: 1; //offset = 744, size = 4
		Bool bForceReplayAnimation: 1; //offset = 744, size = 4
		Bool bIsZoomed: 1; //offset = 744, size = 4
		Bool bDrawingWeaponBlendOut: 1; //offset = 744, size = 4
		Bool bReloadWeaponBlendOut: 1; //offset = 744, size = 4
		Byte VocalizationType; //offset = 748, size = 1

		Bool CalculateCoverLeanOutOffset( Vector Offset, Byte Direction, Byte Type );
		void PrecacheVFX();
		void FireAmmunition();
		Bool IsZoomed();
	};

	class BioTalent: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioTalent, BioBaseComponent, SFXGame )

	public:

		Int m_MAX_TALENT_RANK; //offset = 68, size = 4
		Int m_nID; //offset = 72, size = 4
		Int m_nRank; //offset = 76, size = 4
		Bool m_bSpecializationAvailable: 1; //offset = 80, size = 4
		Array<BioGameProperty*> m_aGameProperties; //offset = 84, size = 12

		void AddGameProperty( BioGameProperty* GameProperty );
		void ScaleToRank( Int Rank );
		void Unapply( Object* Target );
		void Apply( Object* Target );
		Int GetRank();
		Int GetID();
		void Initialize( Int Id, Int StartingRank );
	};

	struct BioTalentDebugData
	{
		Int m_ID; //offset = 0, size = 4
		Int m_Rank; //offset = 4, size = 4
		m_Name m_Name; //offset = 8, size = 4
	};

	struct BioTalentDynamicData
	{
		Bool m_IsUnlocked: 1; //offset = 0, size = 4
		Int m_CurrentRank; //offset = 4, size = 4
		Int m_AvailableRank; //offset = 8, size = 4
		Int m_MaxRank; //offset = 12, size = 4
		Array<Int> m_RankIconArray; //offset = 16, size = 12
		Array<m_RankNameArray> m_RankNameArray; //offset = 28, size = 12
		Array<m_RankDescArray> m_RankDescArray; //offset = 40, size = 12
		Array<m_RankUnlockBlurbArray> m_RankUnlockBlurbArray; //offset = 52, size = 12
	};

	struct BioTalentStaticData
	{
		m_TalentName m_TalentName; //offset = 0, size = 4
		m_TalentDesc m_TalentDesc; //offset = 4, size = 4
		Int m_MaxRank; //offset = 8, size = 4
		String m_sUnlockDetails; //offset = 12, size = 12
	};

	struct BioTalentSpecification
	{
		BioTalent* m_Talent; //offset = 0, size = 4
		Array<Int> m_PrereqTalentIDArray; //offset = 4, size = 12
		Array<Int> m_PrereqTalentRankArray; //offset = 16, size = 12
		Int m_MaxRank; //offset = 28, size = 4
		Int m_LevelOffset; //offset = 32, size = 4
		Int m_LevelsPerRank; //offset = 36, size = 4
		Int m_OriginalRank; //offset = 40, size = 4
		Int m_VisualOrder; //offset = 44, size = 4
		m_LocalizedName m_LocalizedName; //offset = 48, size = 4
		m_LocalizedDesc m_LocalizedDesc; //offset = 52, size = 4
		m_StringForUnlockReferences m_StringForUnlockReferences; //offset = 56, size = 4
		m_BlurbForUnlockReferences m_BlurbForUnlockReferences; //offset = 60, size = 4
		Int m_CostTemplateID; //offset = 64, size = 4
	};

	class BioTalentContainer: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioTalentContainer, BioBaseComponent, SFXGame )

	public:

		Int m_PASSIVE_RANK_ICON; //offset = 68, size = 4
		Int m_LOCKED_RANK_ICON; //offset = 72, size = 4
		Int m_UNLOCKED_RANK_ICON; //offset = 76, size = 4
		srPluralUnlockRequirement srPluralUnlockRequirement; //offset = 80, size = 4
		srSingularUnlockRequirement srSingularUnlockRequirement; //offset = 84, size = 4
		srRequiredUnlockRequirement srRequiredUnlockRequirement; //offset = 88, size = 4
		Int m_EVOLVE_RANK; //offset = 92, size = 4
		Array<BioTalentSpecification> m_TalentSpecArray; //offset = 96, size = 12
		Array<BioTalent*> m_SimpleTalentArray; //offset = 108, size = 12
		BioPawn* m_Target; //offset = 120, size = 4
		Bool m_IsLevelUpInProgress: 1; //offset = 124, size = 4
		Bool m_bUpdateRequired: 1; //offset = 124, size = 4
		Int m_TalentPointsSpent; //offset = 128, size = 4

		void ReloadTalentContainer( BioPawnBehavior* targetBehavior, Array<BioSimpleTalentSave> simpleTalents, Array<BioComplexTalentSave> complexTalents );
		void GetTalentSaveData( Array<BioSimpleTalentSave> simpleTalents, Array<BioComplexTalentSave> complexTalents );
		Bool GetTalentRank( Int TalentID, Int talentRank );
		Bool GetTalentDebugData( Array<BioTalentDebugData> dataArray, Int simpleTalentStartIndex );
		Bool CanEvolveTalent( Int talentIndex, Int TalentID );
		Bool CanDecrementLevelUpRank( Int talentIndex );
		Bool CanIncrementLevelUpRank( Int talentIndex, Int incrementCost );
		Bool DecrementLevelUpRank( Int talentIndex );
		Bool IncrementLevelUpRank( Int talentIndex );
		Bool GetTalentLevelUpRank( Int talentIndex, Int talentRank );
		Bool GetTalentLevelUpIndex( Int TalentID, Int talentIndex );
		Bool GetDynamicLevelUpTalentData( Int talentIndex, BioTalentDynamicData Data );
		Bool GetStaticLevelUpTalentData( Array<BioTalentStaticData> dataArray );
		Bool GetNumLevelUpPoints( Int numPoints, Int pointsSpent );
		Bool GetNumLevelUpTalents( Int numTalents );
		Bool ClearLevelUp();
		Bool ApplyLevelUp();
		Bool InitializeLevelUp();
		Bool UpdateRequired();
		void AddPrerequisiteTalent( Int TalentID, Int prereqID, Int prereqRank );
		void ScaleTalentByIncrement( Int Id, Int rankIncrement );
		void ScaleTalentToRank( Int Id, Int Rank );
		Bool IncreaseTalentMaxRankByIncrement( Int Id, Int MaxRankIncrement );
		Bool IncreaseTalentMaxRank( Int Id, Int MaxRank );
		BioTalent* RemoveTalent( Int Id );
		void AddSimpleTalent( BioTalent* Talent );
		Bool AddSpecialization( Int bonusIdentification, Int ReplaceTalentID );
		Bool AddBonusTalents( Int bonusIdentifier );
		void AddTalent( BioTalent* Talent, Int MaxRank, Int LevelOffset, Int LevelsPerRank, Int VisualOrder );
		void SetTarget( BioPawn* Target );
	};

	enum EBioCharacterImporterTalent2DA
	{
		TALENT_IMPORTER_2DA_TALENT_EFFECT_LEVELS,
		TALENT_IMPORTER_2DA_TALENT_GUI,
		TALENT_IMPORTER_2DA_BONUS_TALENTS,
	};

	struct BioSpecializationData
	{
		Int m_bonusID; //offset = 0, size = 4
		Int m_replaceTalentID; //offset = 4, size = 4
		m_LocalizedName m_LocalizedName; //offset = 8, size = 4
		m_LocalizedDesc m_LocalizedDesc; //offset = 12, size = 4
	};

	class BioTalentImporter: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioTalentImporter, BioBaseComponent, SFXGame )

	public:

		Bio2DA* m_aTalent2DA[5]; //offset = 68, size = 4
		Bool m_bDefault2DAsLoaded: 1; //offset = 88, size = 4

		Bool LoadSpecializationData( Int oldTalentID, Array<BioSpecializationData> specData );
		Bool DoesSpecializationExist( Int TalentID );
		Bool GetTalentUpgradeCost( Int costTemplateID, Int Rank, Int Cost );
		Bool GetTalentRankGuiData( Int TalentID, Int MaxRank, Array<Int> iconArray, Array<nameArray> nameArray, Array<descArray> descArray, Array<unlockBlurbArray> unlockBlurbArray );
		Bool GetTalentGuiData( Int TalentID, talentName talentName, Description Description, UnlockName UnlockName, unlockBlurb unlockBlurb, Int costTemplateID );
		Bool LoadBonusTalentData( Int Row, Int MaxRank, Int LevelOffset, Int LevelsPerRank, Int StartingRank, Int IsVisible, Int VisualOrder );
		Bool LoadBonusTalentRowsAndIDs( Int bonusIdentifier, Array<Int> Rows, Array<Int> talentIDs );
		BioTalent* LoadTalent( BioActorBehavior* Behavior, Int TalentID, Int Rank );
	};

	const char* MAXSEARCHPATHLENGTH = 2000;
	const char* TIMER_ADJUSTTOSLOT_LIMIT = 5.;
	const char* AI_NearbyHurtDistance = 50;
	const char* AI_NearMissDistance = 20;

	enum eWalkWaypointsTypes
	{
		WWT_Linear,
		WWT_Looping,
		WWT_OutAndBack,
	};

	enum ELocationType
	{
		LT_Known,
		LT_Interp,
	};

	enum EPerceptionType
	{
		PT_Sight,
		PT_Heard,
		PT_HurtBy,
	};

	struct EnemyInfo
	{
		Pawn* Pawn; //offset = 0, size = 4
		Vector KnownLocation; //offset = 4, size = 12
		Vector InterpLocation; //offset = 16, size = 12
		Float InterpTime; //offset = 28, size = 4
		CoverInfo Cover; //offset = 32, size = 8
		Float InitialSeenTime; //offset = 40, size = 4
		Float LastSeenTime; //offset = 44, size = 4
		Float LastFailedPathTime; //offset = 48, size = 4
		Bool bVisible: 1; //offset = 52, size = 4
	};

	struct DelayUpdateInfo
	{
		Byte Type; //offset = 0, size = 1
		Pawn* Pawn; //offset = 4, size = 4
		Float UpdateTime; //offset = 8, size = 4
		Name EventName; //offset = 12, size = 8
	};

	class BioAiController: public AIController
	{
		DECLARE_PACKAGE_CLASS( BioAiController, AIController, SFXGame )

	public:
		struct Debug
		{
			/*
			ContinuedState
			PausedState
			PoppedState
			PushedState
			EndState
			BeginState
			*/
		};


		Pawn* oKiller; //offset = 804, size = 4
		Bool bAILogging: 1; //offset = 808, size = 4
		Bool bAILogToWindow: 1; //offset = 808, size = 4
		Bool bDebug_AI: 1; //offset = 808, size = 4
		Bool bDebug_AIRange: 1; //offset = 808, size = 4
		Bool bDebug_AIEnemyList: 1; //offset = 808, size = 4
		Bool bDebug_ThreatRadius: 1; //offset = 808, size = 4
		Bool bAcquireNewCover: 1; //offset = 808, size = 4
		Bool bHighCoverOnly: 1; //offset = 808, size = 4
		Bool bReevaluatePath: 1; //offset = 808, size = 4
		Bool bReachedMoveGoal: 1; //offset = 808, size = 4
		Bool bReachedCover: 1; //offset = 808, size = 4
		Bool bMovingToCover: 1; //offset = 808, size = 4
		FileLog* AILogFile; //offset = 812, size = 4
		Array<Name> AILogFilter; //offset = 816, size = 12
		Array<EnemyInfo> EnemyList; //offset = 828, size = 12
		Array<DelayUpdateInfo> DelayUpdateList; //offset = 840, size = 12
		Float InterpEnemyLocSpeed; //offset = 852, size = 4
		Float Response_MinEnemySeenTime; //offset = 856, size = 4
		Float Response_MinEnemyHearTime; //offset = 860, size = 4
		Actor* FireTarget; //offset = 864, size = 4
		Actor* ForcedTarget; //offset = 868, size = 4
		Actor* PreferredTarget; //offset = 872, size = 4
		Array<Actor*> IgnoredTargets; //offset = 876, size = 12
		Array<BioBaseSquad*> IgnoredSquads; //offset = 888, size = 12
		Float TargetAcquisitionTime; //offset = 900, size = 4
		Int BurstFireCount; //offset = 904, size = 4
		Float BurstFireDelay; //offset = 908, size = 4
		Float WeaponAimDelay; //offset = 912, size = 4
		Int RemainingBurstFireCount; //offset = 916, size = 4
		Bool bWeaponFiring: 1; //offset = 920, size = 4
		Bool bFailedToFire: 1; //offset = 920, size = 4
		Bool m_bCheckLOS: 1; //offset = 920, size = 4
		Float AimInstability; //offset = 924, size = 4
		Float LastInstabilityTime; //offset = 928, size = 4
		Float AI_Acc_InstabilityDecayRate; //offset = 932, size = 4
		Float AI_Acc_Base; //offset = 936, size = 4
		Float AI_Acc_Target; //offset = 940, size = 4
		Float AI_AccMod_Move; //offset = 944, size = 4
		Float AI_AccMod_TargMove; //offset = 948, size = 4
		Float AI_AccMod_BriefAcquire; //offset = 952, size = 4
		Float AI_AccMod_BriefVisibility; //offset = 956, size = 4
		Float AI_AccMod_ShortRange; //offset = 960, size = 4
		Float AI_AccMod_MediumRange; //offset = 964, size = 4
		Float AI_AccMod_LongRange; //offset = 968, size = 4
		Float EnemyDistance_Short; //offset = 972, size = 4
		Float EnemyDistance_Medium; //offset = 976, size = 4
		Float EnemyDistance_Long; //offset = 980, size = 4
		Float EnemyDistance_Melee; //offset = 984, size = 4
		Byte PendingCoverAction; //offset = 988, size = 1
		BioAiController* OldController; //offset = 992, size = 4
		Float m_fActivateTime; //offset = 996, size = 4
		BioPawn* MyBP; //offset = 1000, size = 4
		BioPawnBehavior* MyBPBehavior; //offset = 1004, size = 4
		CoverInfo Cover; //offset = 1008, size = 8
		CoverInfo CoverGoal; //offset = 1016, size = 8
		CoverInfo LastCover; //offset = 1024, size = 8
		Actor* MoveGoal; //offset = 1032, size = 4
		Vector MovePoint; //offset = 1036, size = 12
		Float MoveOffset; //offset = 1048, size = 4
		Actor* SearchGoalActor; //offset = 1052, size = 4
		Float AdjustToSlotTime; //offset = 1056, size = 4
		Float m_fMobTargetMoveTolerance; //offset = 1060, size = 4
		Int m_nFireLineObstructionCount; //offset = 1064, size = 4
		Int m_nFireLineObstructionFrequency; //offset = 1068, size = 4

		void OnLastManStanding();
		void RemoveIgnoredSquad( BioBaseSquad* oSquad );
		void AddIgnoredSquad( BioBaseSquad* oSquad, BioPawn* oBioPawn );
		void RemoveIgnoredTarget( Actor* oTarget );
		void AddIgnoredTarget( Actor* oTarget );
		Actor* GetPreferredTarget();
		void SetPreferredTarget( Actor* oTarget );
		Actor* GetForcedTarget();
		void SetForcedTarget( Actor* oTarget );
		void GetBehaviourList( Array<Name> Behaviours );
		Bool IsTargetInFiringArc( BioPawn* pPawn, Actor* pTarget, Float fFiringArcAsDot );
		Bool HasLOSToTarget( Actor* pTarget, Float fTimeOfHit );
		void SetBestTargetCoverAction( Byte BestAction );
		Bool CanAttack( Actor* oTarget, Vector AttackOrigin, CoverInfo TargetCover, BioPawn* TargetPawn, SFXAI_Core* TargetAI, Bool bCanAttack, Array<Byte> CoverActions, Int ActionIndex, Vector CoverViewPt, Byte TargetCoverAction, Byte AttackerCoverAction );
		void NotifyLimbDetached( Byte ePartGroup );
		void Initialize();
		void OnEnteredPlaypen();
		void OnLeftPlaypen();
		void NotifyUnableToFireFromOpen();
		void NotifyCastAt( Pawn* Attacker, SFXPower* Power, Int EnemyIdx );
		void NotifyTakeHit( Controller* InstigatedBy, Vector HitLocation, Int Damage, Class* DamageType, Vector Momentum, Int EnemyIdx );
		void NotifyEnemyVisible( Int EnemyIdx, Float TimeSinceSeen );
		void NotifyNewEnemy( Pawn* NewEnemy );
		void PawnDied( Pawn* inPawn );
		Class* GetSaveObjectClass();
		Float GetRouteCacheDistance(, Float Distance, Int idx, Actor* LastAnchor );
		Float GetMoveTimeOutDuration();
		void MoveToSlot( Vector vSlotLocation );
		void AdjustToSlot( Int TargetSlotIdx );
		void NotifyReachedCoverSlot( Int SlotIdx );
		void NotifyReachedCover();
		Bool GetCoverAction( CoverInfo ChkCover, Actor* ChkTarget, Byte AttackerCoverAction, Byte TargetCoverAction, Bool bSetPendingCoverAction, BioPawn* PawnTarget, CoverInfo ChkTargetCover, Int nIndex, Byte Type, Int nFireLinkIdx, Array<Int> FireLinkIndices, CoverSlot Slot, Array<FireLinkItem> FireLinkItems );
		Bool IsPeeking();
		Bool IsLeaning();
		Bool SetCoverType(, Int LeftSlotIdx, Float SlotPct, Vector LtToRt, Vector ProjLocToCov );
		void UnClaimCover();
		Bool ClaimCover( CoverInfo NewCover, Bool bResult );
		Bool IsAtCover();
		Bool HasValidCover();
		void UnPossess();
		void Possess( Pawn* NewPawn, Bool bVehicleTransition );
		Bool FindNearestOpenLocation( Vector vStartLocation, Vector vFoundLocation, Pawn* oTarget, Int nMaxShellsToCheck );
		void PushOntoRouteCache( NavigationPoint* Marker, Int I, Int CacheLen );
		Actor* GetLastObjectInRouteCache( Actor* oMoveTarget );
		Actor* DecrementRouteCache(, Int I, Int nShift, Actor* NewRoute );
		Int RouteCacheSize();
		void ClearRouteCache();
		void RestoreAI();
		void ChangeAI( Class* NewAIClass, Bool bCacheOldController, BioAiController* NewController );
		void DrawDebug( BioHUD* HUD, Int idx, SFXWeapon* Weapon );
		void AILog_Internal( String LogText, Name LogCategory, Bool bForce );
		void Tick( Float DeltaTime );
		Bool PlayerActivate( Actor* Target_, Int I, Int J, Bool bActivated );
		void LookAtPawn( Pawn* oLookTarget, Int nRank, BioPawn* oPawn );
		void OnLeavingStasis( SFXSeqEvt_LeavingStasis* stasisEvent, Int idx, BioPawn* oPawn );
		void OnEnteringStasis( BioPawn* oPawn, SFXSeqEvt_EnteringStasis* stasisEvent, Int idx );
		void OnStreamingLevelLeavingStasis();
		void OnStreamingLevelEnteringStasis();
		BioEpicPawnBehavior* GetPawnBehavior( Pawn* oPawn );
		void BioSetAdjustLocation( Vector vAdjustLoc );
		void MobTarget( Actor* oTarget, Float fMoveTolerance );
		Bool AdjustSteeringMoveSpeed( Vector vSteering );
		Bool GetSteeringVector( Vector vSteering );
		void SteeringMovement();
		Actor* GetTarget();
		Bool ExploreMode( Float fDelaySeconds );
		Bool ReadyMode( Float fDelaySeconds );
		void InvalidateCover();
		Bool IsValidCover( CoverInfo TestCover );
		Bool GetPawnCover( Pawn* ChkPawn, CoverInfo out_Cover );
		Bool GetCover( Pawn* ChkPawn, CoverInfo out_Cover );
		Bool IsCoverExposedToAnEnemy( CoverInfo TestCover, Float out_ExposedScale, Pawn* TestEnemy, Bool bActualLocation );
		Bool DirectWalkCheck( Vector vTarget, Actor* pTarget );
		void PrecisionMoveTo( Vector vLoc, Rotator rRot );
		Bool WaitForActionToComplete( BioSeqData* oSeqData );
		Bool IsSwitchingWeapons();
		Bool ShouldAutoReload(, SFXWeapon* oWeapon );
		Bool IsReloading();
		void NotifyWeaponFinishedFiring( Weapon* W, Byte FireMode, Bool bWantsRefire, SFXWeapon* Weapon );
		void NotifyWeaponFired( Weapon* W, Byte FireMode );
		Bool ShouldStopFiring();
		Bool ShouldRefire();
		void StopFiring();
		void StartFiring();
		void NotifyFireLineBlocked();
		void RefireWeapon();
		void PollRefireWeapon();
		Bool FireWeapon( Int NewBurstCount, Float NewBurstDelay );
		void ModifyBurstDelay( SFXWeapon* Weapon, Float BurstDelay );
		Bool FireWeaponBurst(, SFXWeapon* Wpn, Int BurstRounds );
		Bool HandleFireLineObstruction();
		Bool IsFriendlyBlockingFireLine(, BioAiController* C, Vector FireLine, Vector FireStart, Vector VectToFriendly, Float FireLineWidth, Float DistFromLine );
		Bool IsFireLineObstructed();
		void GetPlayerViewPoint( Vector out_Location, Rotator out_Rotation, Bool bAimAtEnemy );
		Rotator GetAdjustedAimFor( Weapon* W, Vector StartFireLoc, Vector AimLoc, SFXWeapon* Wpn, Float InaccuracyPct, Float Pct, Rotator AccRot, Rotator AimRot, Int EnemyIdx, SFXModule_GameEffectManager* GEModule, Float AccuracyPenalty, Vector2D AccMinCone, Vector2D AccMaxCone, SFXHeavyWeapon* oHeavyWeapon );
		void UpdateAccuracy( Float DeltaTime );
		void ResetAimInstability();
		Vector GetAimLocation( Int EnemyIdx, Vector StartLoc, Vector AimLoc );
		Bool CanFireAt( Actor* ChkTarget, Vector ViewPt, Bool bUseEyeLocation, Bool bUseRotation );
		Bool HasValidTarget( Actor* TestTarget, Pawn* TestPawn );
		Bool HasValidEnemy( Pawn* TestEnemy );
		Bool HasAnyEnemies();
		Name GetSquadName();
		Bool AddEnemy( Pawn* NewEnemy, Name BroadcastSquad, Bool bForceNotice, Bool bSkipBroadcast, Int idx, BioAiController* AI, Bool bHadEnemies );
		void NotifyNearMiss( Vector HitLocation );
		void CheckNearMiss( Pawn* Shooter, Weapon* W, Vector WeapLoc, Vector LineDir, Vector HitLocation, Vector ClosestPoint );
		Bool CanHearPawn( Pawn* Heard, Float Loudness, Name NoiseType, Float Dist );
		void HearNoise( Float Loudness, Actor* NoiseMaker, Name NoiseType, Pawn* Heard );
		Bool CanSeePawn( Pawn* Seen );
		void SeeMonster( Pawn* Seen );
		void SeePlayer( Pawn* Seen );
		void AddDelayedUpdate( Int EnemyIdx, Byte Type, Name EventName, Float delay, Int idx, DelayUpdateInfo Info );
		void UpdateAllEnemyInfo( Int idx, Int EnemyIdx );
		void AutoNotifyEnemy( BioAiController* AI );
		void AutoAcquireEnemy( Controller* PotentialEnemy );
		void FillEnemyList( Int idx, Int Num, BioAiController* AI );
		Bool IsMediumRange( Vector TestLocation );
		Bool IsShortRange( Vector TestLocation );
		Float TimeSinceEnemyVisible( Int idx );
		void InterpEnemyLocation( Int idx );
		Bool IsEnemyVisibleByIndex( Int idx );
		void SetKnownEnemyInfo( Int EnemyIdx, Pawn* EnemyPawn, Vector EnemyLoc );
		Vector GetEnemyLocationByIndex( Int idx, Byte LT );
		Vector GetEnemyLocation( Pawn* TestPawn, Byte LT );
		Vector GetFireTargetLocation( Byte LT );
		Int GetEnemyIndex( Pawn* TestPawn );
		Bool UpdateEnemyInfo( Int idx, Byte Type, Name EventName );
		Bool IsFriendly( Controller* Other );
		Bool IsHostile( Controller* Other );
		void MapName_Hench_Teleport( Float X, Float Y );
		void MapName_Hench_FailToPath( Float X, Float Y );
		void BioOnPawnActionStateChanged();
	};

	enum EProfileType
	{
		Profile_None,
		Profile_AI,
		Profile_Camera,
		Profile_Combat,
		Profile_SysDesign,
		Profile_CombatStats,
		Profile_Difficulty,
		Profile_Angst,
		Profile_Cooldown,
		Profile_Damage,
		Profile_Pawn,
		Profile_Power,
		Profile_Tech,
		Profile_Treasure,
		Profile_Locomotion,
		Profile_AnimTree,
		Profile_Ticket,
	};

	struct ProfileData
	{
		Name Keyword; //offset = 0, size = 8
		String Header; //offset = 8, size = 12
		String Description; //offset = 20, size = 12
		Bool bNoTarget: 1; //offset = 32, size = 4
		Func Func; //offset = 36, size = 12
		Utility Utility; //offset = 48, size = 12
	};

	class BioCheatManager: public CheatManager
	{
		DECLARE_PACKAGE_CLASS( BioCheatManager, CheatManager, SFXGame )

	public:

		Array<ProfileData> AllProfiles; //offset = 60, size = 12
		Byte CurrentProfile; //offset = 72, size = 1
		Actor* ProfileTarget; //offset = 76, size = 4
		Name ProfileSubTarget; //offset = 80, size = 8
		Vector2D TopLeft; //offset = 88, size = 8
		Int CurrentColumn; //offset = 96, size = 4
		Float ColumnWidth; //offset = 100, size = 4
		Color ProfileTitleColor; //offset = 104, size = 4
		Color ProfileHeaderColor; //offset = 108, size = 4
		Color ProfileTextColor; //offset = 112, size = 4
		Color ProfileHighlightColor; //offset = 116, size = 4
		Bool bProfileHidesGUI: 1; //offset = 120, size = 4
		Bool m_bShowAngstIcons: 1; //offset = 120, size = 4
		Float ProfilesTime; //offset = 124, size = 4
		Float ProfilesDisplayTime; //offset = 128, size = 4
		Bool bShowAllProfiles: 1; //offset = 132, size = 4
		Bool m_bShowPowerAiming: 1; //offset = 132, size = 4
		Bool m_bEnablePowerCooldown: 1; //offset = 132, size = 4
		Bool m_bShowPowerImpactText: 1; //offset = 132, size = 4
		Bool m_bShowPowerList: 1; //offset = 132, size = 4
		Array<String> m_aPowerList; //offset = 136, size = 12
		__ProfileHandler__Delegate __ProfileHandler__Delegate; //offset = 148, size = 12
		__ProfileUtility__Delegate __ProfileUtility__Delegate; //offset = 160, size = 12

		void IgnorePlayer( Bool bIgnore, BioPawn* Player, BioAiController* AI );
		void ToggleThreatRadius( String PawnName, BioPawn* oPawn, SFXAI_Core* oController );
		void TestSavingMessage( Float fSaveTime, SFXSFHandler_SavingDisplay* oHandler );
		void TestPulseFullAmmo();
		void DumpSFXObjectPool();
		void PauseNotifications( Bool bPause, BioHintSystem* oHintSystem, BioPlayerController* oController );
		void Test_Notifications( BioHintSystem* oHintSystem, BioPlayerController* oController );
		void PowersWhileVisible( BioPlayerSquad* PlayerSquad, BioAiController* Controller, SFXAI_Henchman* Henchman, Bool bEnabled );
		void HolsterWeapon( String nmPawn, BioPawn* oPawn, SFXAI_Core* oController );
		void ResetAlwaysPlay();
		void Speak( Byte EventID, String sInstigator, String sRecipient, BioPawn* TheInstigator, BioPawn* TheRecipient );
		void ShowOnlineMarketplace( SFXOfferDescriptor oOffer, Array<SFXOfferDescriptor> aOffers, MassEffectGuiManager* oManager, BioSFHandler_MainMenu* oHandler );
		void LogActorClasses();
		void LogActorUnclassified();
		void LogActorArtPlaceables();
		void LogActorPrefabInstances();
		void LogActorEmitters();
		void LogActorSkelMeshes();
		void LogActorPawns();
		void LogAnimSequences();
		void EnableFaceFX( Bool bEnable, Pawn* oPawn );
		void ReadAchievements( Int TitleId, Int Index, Array<AchievementDetails> Details );
		void UnlockAllGamerpics();
		void UnlockAchievementRange( Int Start, Int End, Int idx, Int Lower, Int Upper );
		void UnlockAllAchievements( Int idx );
		void UnlockAchievement( Byte AchievementId );
		void TogglePlayersOnly();
		void DebugSetPlotState( Name Type, Name plotVarName, Float Value, BioGlobalVariableTable* oGV );
		void GetPlotVariableID( Name plotVarName, BioGlobalVariableTable* oGV, Int Index );
		void HideWwiseVolumeLocations( String nmVolume, WwiseAudioVolume* AudioVolume );
		void ShowWwiseVolumeLocations( String nmVolume, WwiseAudioVolume* AudioVolume );
		void CerberusDLC( Bool bAvail, MassEffectGuiManager* oManager, BioSFHandler_MainMenu* oHandler );
		void UpdateHealth();
		void UpdateShields();
		void UpdateBonusListCache();
		void ApplyAchPartyDamageBonus( BioPawn* Player, SFXModule_GameEffectManager* Manager, Class* EffectClass, SFXGameEffect* Effect );
		void ApplyAchPartyHealthBonus( BioPawn* Player, SFXModule_GameEffectManager* Manager, Class* EffectClass, SFXGameEffect* Effect );
		Class* FindSFXGameEffectClass( String ClassName, Class* FoundClass );
		void CloseGui( Name HandlerId, MassEffectGuiManager* oManager );
		void OpenGui( Name HandlerId, MassEffectGuiManager* oManager );
		void DisplayTime();
		void ProfileDifficulty( SFXPRI* PRI, SFXGame* Game, Int ChallengeLevel, Float ChallengeModifier, Float LevelModifier, Float TechModifier );
		Int GetCharacterClassName( Class* PlayerClass, SFXEngine* Engine, Class* CharacterClass );
		void LoadExternalSave( String SavePath );
		void LoadGame( String LoadName );
		void SaveGame( String SaveName );
		Bool ImportAllCareersXenon( Int TargetDeviceId );
		void ImportAllCareers_OnDeviceSelectionComplete( Bool bWasSuccessful, BioPlayerController* PC, OnlineSubsystem* OnlineSub, PlayerIntEx PlayerIntEx, Int ControllerId, Int DeviceID, String DeviceName );
		void ImportAllCareers( BioPlayerController* PC, OnlineSubsystem* OnlineSub, PlayerIntEx PlayerIntEx, Int ControllerId );
		void SetUgly( Int Ugliness, SFXPawn_Player* Player );
		void GetIntimidate( BioPawnBehavior* Behavior );
		void GetCharm( BioPawnBehavior* Behavior );
		void SetRenegade( Int nPoints, SFXGame* Game );
		void GetRenegade( SFXGame* Game );
		void SetParagon( Int nPoints, SFXGame* Game );
		void GetParagon( SFXGame* Game );
		void Splitscreen( SFXPlayerController* PC );
		void UpdateSplitscreenPlayers( Bool bCreatePlayers );
		void Unreaper();
		void TeleportHenchman( String nmPawn, BioPawn* oPawn, SFXAI_Henchman* oController, Pawn* oPlayer );
		void ShowDebugText( Bool bShow );
		void GUICMD( Name nmPanelTag, String sCmd, String sArg1, String sArg2, MassEffectGuiManager* oSFMgr, String sResultMessage );
		void ResetTalents( String nmPawn, BioPawn* oPawn );
		void ProfileEffects( SFXModule_GameEffectManager* Manager, SFXGameEffect* Effect, String output );
		void RemoveEffect( String nmPawn, String EffectClassName, BioPawn* oPawn, Class* EffectClass, SFXModule_GameEffectManager* Manager );
		void GiveEffectWithValue( String nmPawn, String EffectClassName, Float Value, BioPawn* oPawn, SFXGameEffect* Effect, Class* EffectClass, SFXModule_GameEffectManager* Manager );
		void GiveEffect( String nmPawn, String EffectClassName, BioPawn* oPawn, SFXGameEffect* Effect, Class* EffectClass, SFXModule_GameEffectManager* Manager );
		void RemovePower( String nmPawn, Class* PowerClass, BioPawn* oPawn );
		void SetRank( String nmPawn, Class* PowerClass, Float fRank, BioPawn* oPawn, SFXPower* oPower );
		void GivePower( String nmPawn, String PowerClassName, Class* PowerClass, BioPawn* oPawn, SFXPower* oPower );
		Class* FindPowerClass( String PowerClassName, Class* FoundClass );
		void MapPower( Name PowerName );
		void GetMorinth( BioGlobalVariableTable* GVars, Bool Value );
		void SetMorinth( Bool Value, BioGlobalVariableTable* GVars );
		void GetSpecialist( String Henchman, Int HenchmanIndex, BioGlobalVariableTable* GVars );
		void SetSpecialist( String Henchman, Int HenchmanIndex, BioGlobalVariableTable* GVars );
		void GetFireTeam( String Henchman, Int HenchmanIndex, BioGlobalVariableTable* GVars );
		void SetFireTeam( String Henchman, Int HenchmanIndex, BioGlobalVariableTable* GVars );
		void GetHenchmanAppearance( String Henchman, String HenchmanCodename, Int Appearance, Name nmLabel, BioGlobalVariableTable* GVars );
		void SetHenchmanAppearance( String Henchman, Int Value, String HenchmanCodename, Name nmLabel, BioGlobalVariableTable* GVars );
		void GetHenchmanAvailable( String Henchman, String HenchmanCodename, Bool available, Name nmLabel, BioGlobalVariableTable* GVars );
		void SetHenchmanAvailable( String Henchman, Bool Value, String HenchmanCodename, Name nmLabel, BioGlobalVariableTable* GVars );
		void GetHenchmanKnown( String Henchman, String HenchmanCodename, Bool known, Name nmLabel, BioGlobalVariableTable* GVars );
		void SetHenchmanKnown( String Henchman, Bool Value, String HenchmanCodename, Name nmLabel, BioGlobalVariableTable* GVars );
		void GetHenchmanDead( String Henchman, Int GVarIndex, Bool Dead, BioGlobalVariableTable* GVars );
		void SetHenchmanDead( String Henchman, Bool Value, Int GVarIndex, BioGlobalVariableTable* GVars );
		void GetHenchmanSpecialization( String Henchman, String HenchmanCodename, Bool specialized, Name nmLabel, BioGlobalVariableTable* GVars );
		void SetHenchmanSpecialization( String Henchman, Bool Value, String HenchmanCodename, Name nmLabel, BioGlobalVariableTable* GVars );
		void GetHenchmanLoyalty( String Henchman, String HenchmanCodename, Bool loyalty, Name nmLabel, BioGlobalVariableTable* GVars );
		void SetHenchmanLoyalty( String Henchman, Bool Value, String HenchmanCodename, Name nmLabel, BioGlobalVariableTable* GVars );
		Int GetHenchIsDeadGVarIndex( String Henchman );
		Actor* GetHenchmanByName( String sName, BioPawn* Player, BioPawn* SquadMember, Int nIndex );
		String GetHenchName( Int Henchman );
		Int GetHenchIndex( String Henchman );
		String GetHenchCodename( String Henchman );
		void DisplayNegotiate( BioPawn* MyPawn );
		void MainMenu_ClearNotifications( MassEffectGuiManager* oManager, BioSFHandler_MainMenu* oHandler );
		void MainMenu_AddCerberusItem( String i_sTitle, String i_sInfo, MassEffectGuiManager* oManager, BioSFHandler_MainMenu* oHandler );
		void BlazeTest_ShowCerberusWelcomeMessage( SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowParentEmail( SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowAccountDemographics( SFXOnlineComponentUI* oBlaze, Array<String> m_CountryCodeList, Array<String> m_CountryDisplayList );
		void BlazeTest_ShowRedeemCode( SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowCerberusIntro( SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowNucleusWelcomeMessage( SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowTermsOfService( String i_sTermsOfService, Bool bTOSChanged, SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, SFXOnlineComponentUI* oBlaze, Array<String> m_CountryCodeList, Array<String> m_CountryDisplayList );
		void BlazeTest_ShowCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bRegisterProduct, Bool bBioWareProducts, Bool bUnderage, SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowEmailPasswordMismatch( String Email, String Password, SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowMessageBox( String sTitle, String sMessage, String sButton1Text, String sButton2Text, String sButton3Text, SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowNucleusLogin( String Email, String Password, Int eScreenState, SFXOnlineComponentUI* oBlaze );
		void BlazeTest_ShowIntroPage( SFXOnlineComponentUI* oBlaze );
		void BlazeTest_DestroyGui( MassEffectGuiManager* oSFMgr, SFXOnlineComponentUI* oBlaze );
		void BlazeTest_CreateGui( MassEffectGuiManager* oSFMgr, SFXOnlineComponentUI* oBlaze );
		void BlazeTestConsumeCode( String sCode, Bool bMember );
		void BlazeTestJacobStory( Bool bStarted, Bool bFinished );
		void BlazeTestSetAutoLoginOption( Bool bAutoLogin );
		void BlazeTestSetNucleusSuccessful( Bool bArg, Bool bSave );
		void BlazeTestSetCerberusRefused( Bool bArg, Bool bSave );
		void BlazeTestSetNucleusRefused( Bool bArg, Bool bSave );
		void BlazeTestReconnect( Byte connectMode );
		void BlazeTestAcceptTOS( Bool bAccept );
		void BlazeTestDisconnect();
		void ForceEndRagdoll();
		void DebugCoverCheck( BioHUD* HUD, BioPlayerController* oController );
		void AdjustMediGel( Int nMediGelAdjust, BioPawn* oBioPawn );
		void AdjustCredits( Int nCreditAdjust, BioPawn* oBioPawn );
		void SetAimAssistValues( Vector2D Adhesion, Float AimCorrection, Vector2D Friction );
		void PrintMuzzleLoc( String Target );
		void CamToggleHook();
		void CamToggleDebug();
		void CamLockCollision();
		void ProfileScaleform( Float fUpdateTime, Float fRenderTime, Float fAdvanceTime, Float fUpdateTotal, Float fRenderTotal, Float fAdvanceTotal, BioSFManager* pSFManager, Int nPanel );
		void ProfileHenchmen( BioPlayerSquad* PlayerSquad, BioAiController* AIController, SFXAI_Henchman* Controller, SFXPawn_Henchman* Pawn, Int nIndex );
		void ProfileTicket( BioPawn* PlayerPawn, BioPawn* HenchmanPawn, BioAiController* SquadAI, BioPlayerSquad* PlayerSquad );
		void ProfileAnimTree();
		void ProfileLocomotion();
		void ProfileLookAt( BioPawn* Pawn );
		void ProfileDesignBudget();
		void ProfileCamera( PlayerController* Controller, SFXPlayerCamera* Camera );
		void ProfileAnim( BioPawn* Pawn );
		void ProfileGestures( BioPawn* Pawn );
		void ProfileConversationBug();
		void ProfileConversation();
		void EvalCover( BioAiController* oCont, Pawn* oPawn );
		void ProfileDoor( SFXDoor* door, BioVisualEffect* Effect );
		void ProfileCover( BioPawn* Pawn );
		void ProfileCooldown( BioPawn* Pawn, BioPawnBehavior* Behavior, Int nIndex, BioPower* Power, Float Cooldown, String CooldownBar );
		void ToggleAngstIcons();
		void ProfileAngst();
		void DisplayAngstInfo( Bool bShowIcons, Bool bShowProfileData, BioPawn* oPawn );
		void DisplayAngstWeaponRange( BioPawn* oPawn, Bool bShowIcons, Bool bShowProfileData, SFXAI_Core* oCont, SFXWeapon* oWeapon, Float fDistanceToTarget );
		void TestTreasure( BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure );
		void ProfileTech( BioGlobalVariableTable* VariableTable, BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, Int I, Int Row, Int nTechLevel, Name nmTech );
		void ProfileTreasure( BioGlobalVariableTable* VariableTable, SFXInventoryManager* PlayerInventory, Int TreasureCount, Int TreasureCountMax, BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, SResourceBudget Budget, Int I, Int nTreasureId, Int Row, Name nmTreasure, Bool bHasTreasure, TreasureBudget stGlobalBudget, TreasureBudget stLevelBudget );
		void UnlockAllTech( Int I, BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, Int N, Name nmTech );
		void UnlockAllResearch( Bool B, BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, Int I, Int nTreasureId, Name nmRequiredTech, Name nmTech );
		void UnlockAllTreasure( Bool B, BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, Int I, Int nTreasureId );
		void ProfileBonuses( SFXBonusList* BL, BioGlobalVariableTable* gv );
		void ProfileMultipliers( SFXBonusList* BL );
		void DrawTargetLineUtility( BioPawn* Pawn, Vector EndPoint );
		void DrawAIUtility( BioPawn* Pawn, NavigationPoint* Nav, NavigationPoint* LastNav, BioAiController* AI );
		void ProfilePower( BioPawn* Pawn, BioPawnBehavior* Behavior, BioPower* Power, BioAttributesPawn* Attributes );
		void SetProfileChoseMorinth( Bool ChoseMorinth, SFXProfileSettings* Profile );
		void ProfileGameSettings();
		void ProfileVehicle( SFXVehicleHover* Vehicle );
		void ProfilePawn( BioPawn* Pawn, BioAttributesPawn* Attributes, Bio_Appr_Character* Appearance, BioTalentSpecification TalentSpec, BioTalent* Talent, String Reason, SFXGame* Game, BioEpicPawnBehavior* oBehavior, BioPlayerSquad* oPlayerSquad );
		void ProfileCombatStats( SFXPRI* Stats, BioPawn* Pawn );
		void ClearCombatStats();
		void ProfileCombat( BioPawn* Pawn, Actor* Target, BioAttributesPawn* Attributes, SFXWeapon* Weapon, SFXWeapon* TargetWeapon, SFXArmor_Base* Armor, SFXShield_Base* Shield, SFXLoadoutData* Loadout, Class* WeaponClass, SFXInventoryManager* InvManager, SFXAI_Core* AI, BioAiController* SquadAI, EnemyInfo EnemyInfo, Int idx, NavigationPoint* Nav, SFXModule_Damage* DmgModule, Class* DamageType, Float F );
		void LockDifficulty( Float fDifficulty, SFXPRI* PRI );
		void ProfileSysDesign( SFXPRI* PRI, SFXGame* Game, Int ChallengeLevel, Float ChallengeModifier, BioGlobalVariableTable* VariableTable, BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, SResourceBudget Budget, TreasureBudget stLevelBudget, SFXModule_DamagePlayer* oDmg, BioPawn* BP );
		void EmptyInventory( BioPawn* PlayerPawn, SFXInventoryManager* oInventory );
		void ShowBodyDamage( BioPawn* Pawn, Byte Group, RB_BodySetup* Body, SFXModule_Damage* Damage );
		void ProfileDamage( BioPawn* Pawn, SFXModule_Damage* Damage );
		String PrettyFloat( Float F, Int decimals );
		void Actors( Class* ActorClass, Actor* TheActor, Vector vOrigin, Vector vExtent, Vector vStart, Vector vEnd );
		void Playpens( BioPlaypenVolume* oPlaypen, Int nRed, Int nGreen, Vector vOrigin, Vector vExtent, Vector vStart, Vector vEnd );
		void SetBoolByID( Int PlotID, Bool nValue, BioGlobalVariableTable* oGV );
		void SetBoolByName( Name nmVar, Bool nValue, BioGlobalVariableTable* oGV );
		void SetIntByName( Name nmVar, Int nValue, BioGlobalVariableTable* oGV, SFXPlotTreasure* oTreasure, STech stTech );
		void AwardTreasure( Int nTreasureId, SFXPlotTreasure* oTreasure );
		void Distance( String nmActor1, String nmActor2, Actor* oActor1, Actor* oActor2 );
		void EnableAllAI( Bool bEnable, SFXAI_Core* oController, BioRemoteLogger* GLogger );
		void EnableAI( Name nmPawn, Bool bEnable, Pawn* oPawn, SFXAI_Core* oController );
		void SetPowerPercent( Name nmPawn, Float fPercent, Pawn* oPawn, BioPawnBehavior* oBehavior );
		void DebugMoveToGoal( Name nmPawn, Name nmGoalActor, Float fOffsetDistance, Pawn* oPawn, SFXAI_Core* oController, Actor* oGoalActor );
		void DebugMoveToCover( Name nmPawn, Name nmLink, Int nSlot, Pawn* oPawn, SFXAI_Core* oController, CoverLink* oLink, CoverInfo oCoverInfo );
		void DebugDraw_Ammo( BioHUD* HUD, Float OldX, Float OldY, Font* OldFont, SFXWeapon* Weapon );
		void DebugAmmo( BioHUD* HUD );
		void DebugDraw_Distance( BioHUD* HUD, Vector CamLoc, Vector RenderLoc, Rotator CamRot, Actor* chkActor, Pawn* ChkPawn, SkeletalMeshComponent* Mesh, Float X, Float Y, Float YL, Vector ScreenCoords );
		void DebugDistance( BioHUD* HUD );
		void DebugDraw_LOD( BioHUD* HUD, Vector CamLoc, Vector RenderLoc, Rotator CamRot, Actor* chkActor, Pawn* ChkPawn, SkeletalMeshActor* SMA, SkeletalMeshComponent* Mesh, Float X, Float Y, Float YL, Vector ScreenCoords );
		void DebugLOD( BioHUD* HUD );
		void DebugDraw_AI( BioHUD* HUD, Vector CamLoc, Rotator CamRot, BioAiController* AI );
		void DebugAI( BioHUD* HUD );
		void DebugWeapon();
		void DebugFriction( BioHUD* HUD );
		void DebugAdhesion( BioHUD* HUD );
		void DebugBioticCharge( BioHUD* HUD, SFXPower* Power, BioPowerScript* Script );
		void DebugDraw_Health( BioHUD* HUD, BioPawn* BP, Float fShields, Float fHealth, SFXModule_DamagePlayer* oDmg );
		void DebugHealth( BioHUD* HUD, BioPawn* BP );
		void DebugZoomSnap( BioHUD* HUD );
		void DebugVoc( BioHUD* HUD );
		void AddResourceToRoot( String sName );
		void RemoveAIFilter( Name nmFilter, BioAiController* oController, Int nIndex );
		void AddAIFilter( Name nmFilter, BioAiController* oController, Int nIndex, Bool bFound );
		void AILog( String nmPawn, Bool bEnable, BioPawn* oPawn, BioAiController* oController );
		void LogAllInstantGameProperties();
		void LogAllGameProperties();
		void SetAutoRightUpForceAndTorque( Float fUpLiftForce, Float fUprightTorque, SVehicle* oVeh );
		void SetVehicleCOMOffsetZ( Float fOffsetZ, SVehicle* oVeh );
		void Mark( String sComment );
		void ClearDebugLines();
		void GameOver();
		void AddPowerInfoToList( String sPowerInfo );
		void DisplayPowerList( BioHUD* oHUD, Float fX, Float fY, Int nIndex );
		void ClearPowerList();
		void TogglePowerList();
		void SetVehicleExitLog( Bool bStatus, BioVehicleBase* oVeh );
		void SetCurvePixelError( Name nmPanel, Float fError, BioSFManager* oManager, BioSFPanel* oPanel, Bool bAll, Int I );
		void ToggleEdgeAA( Name nmPanel, BioSFManager* oManager, BioSFPanel* oPanel, Bool bAll, Int I );
		void DisplayPowerImpactText( BioHUD* oHUD, Actor* oActor, BioActorBehavior* oBehavior, Vector vLocation );
		void TogglePowerImpact();
		void InitPlotManagerValueByIndex( Int nIndex, String sVariableType, Float fValue, BioGlobalVariableTable* gv, Int nValue, Bool bValue );
		void DumpPlotManagerValueByIndex( Int nIndex, String sVariableType, BioGlobalVariableTable* gv, Int nValue, Float fValue, Bool bValue );
		void EnablePowerCooldown( Bool bEnable, BioRemoteLogger* GLogger );
		void EnterCombatStasis( Name nmPawn, Float fDuration, Bool bAllowDamage, Pawn* oPawn, BioActorBehavior* oBehavior );
		void UsePower( Name nmPawn, Name nmPower, Pawn* oPawn, BioPlayerSquad* oPlayerSquad );
		void HideStrings( Bool i_bHide );
		void DisplayStringID( Bool i_bDisplay );
		void CodexAudit();
		void JournalAudit();
		void FeignDeath( Name nmPawn, Bool B, BioPawn* pTargetPawn );
		void TogglePowerAiming();
		void SkynetSavegame( String sFilename );
		void SkynetScreenshot( String sFilename );
		Float GetPowerField( BioPawnBehavior* targetBehavior, Name PowerName, Name FieldName );
		void NotFun();
		void SkynetToggleNucleusTelemetry();
		void SkynetToggleSessionDisplay();
		void SkynetToggleVerboseMode();
		void SkynetToggleSilentMode();
		void SkynetToggleQAPaths();
		void GiveSuperGun( BioPlayerController* oController, BioPawn* oPlayer, SFXWeapon* oWeapon );
		void SetPlayerSquadMin1Health( Bool B, BioBaseSquad* pSquad, Int I, BioActorBehavior* pBehavior, BioRemoteLogger* GLogger );
		void Min1Health( Bool B );
		void ToggleSFHUD( MassEffectGuiManager* oManager );
		void DownloadContent();
		void ShowMarketplaceUI();
		void GiveItem( String sTarget, Name nmItemLabel, BioPlayerController* oController, BioPawn* oPawn, Class* cWeapon );
		void ResetWeapons( String sTarget, SFXPawn* Pawn );
		Class* FindWeaponClass( String WeaponClassName, Class* FoundClass );
		void BasicWeapons( BioPlayerController* oController, SFXInventoryManager* oInventory, Weapon* oWeapon );
		void InitFuelEfficiency( Float fEff, SFXInventoryManager* oInventory );
		void InitMaxFuel( Float FMax, SFXInventoryManager* oInventory );
		void InitFuel( Float fAmt, SFXInventoryManager* oInventory );
		void InitAmmo( Int nAmmo, SFXInventoryManager* InvManager, BioPlayerController* Controller, SFXHeavyWeapon* HWeapon, SFXWeapon* Weapon );
		void InitProbes( Int nResource );
		void InitMedigel( Int nMedigel );
		void InitPlatinum( Int nResource );
		void InitSalvage( Int nSalvage );
		void InitIridium( Int nResource );
		void InitEezo( Int nResource );
		void InitPalladium( Int nResource );
		void InitCredits( Int nCredits );
		void InitResource( Byte eResourceType, Int nAmt, Int nAmtIncrease, BioPawn* oPlayerPawn, SFXInventoryManager* oInventory );
		void EnableDamage( Bool B, BioRemoteLogger* GLogger );
		Actor* GetUIWorldActor();
		Actor* GetActorFromString( String Str );
		void TestFalling( Name nmTarget, BioPlayerController* oController, BioPawn* oPawn, Vector Location );
		void TestRagdoll( String sWhitespaceDelimitedArguments );
		void DebugSpawnPrefab( Int nTestNum );
		void TestPrefab( Int nTestNum );
		void BioTransition( Int nTransition, Int nParam );
		void BioLoadState( Int nSaveStateSlot );
		void BioSaveState( Int nSaveStateSlot );
		void GiveSpectreTalents();
		void ScaleTalentByIncrement( Int TalentID, Int rankIncrement, BioPawn* Player );
		void IncreaseTalentMaxRankByIncrement( Int TalentID, Int MaxRankIncrement, BioPawn* Player );
		void IncreaseTalentMaxRank( Int TalentID, Int MaxRank, BioPawn* Player );
		void GiveBonusTalent( Int bonusIdentifier, BioPawn* Player );
		void GiveTalentPoints( Int nNumPoints, BioPawn* Player, BioPawn* SquadMember, Int nIndex );
		void ShowVocInfo( String PawnTag, String eventStr, BioPawn* Pawn, Byte EventID, Int RoleIdx, Int VariationIdx, String outputstring );
		void DebugVocLine( String Instigator, String Recipient, String eventStr, BioPawn* Inst, BioPawn* Recp, Byte EventID, SFXVocalizationEvent Voc );
		void DebugVocSystem( Bool bEnable );
		void GiveXP( Float XPValue );
		void TestConditionals( BioGlobalVariableTable* gv, Int I, Float fTime );
		void SetVehicleCamRadiusPoint( Int nIndex, Float fDegVal, Float fScaleVal );
		void BioClearCrossLevelReferences( Level* pLevel );
		void ForceEnableCCD( Bool bValue );
		void SetGCDebugPackage( String sPackageName );
		void SetLocation( String sDestination );
		void OutputBugReportXML( Bool bCreateSavegame, Bool bCreateScreenshot );
		void GetLocation( String sLocation );
		void StasisParty( Bool bValue, BioPawn* ChkPawn, BioAiController* AIController );
		void Damage( String Target, Float Amount, Actor* MyTarget );
		void KillSelf();
		void KillParty( BioPawn* ChkPawn );
		void KillEnemies( BioPawn* ChkPawn );
		void KillTarget( Actor* MyTarget );
		void RenderHUD( BioHUD* myHUD );
		void AT( Name newArea, Name StartPoint );
		String GetStateNameByIdx( Controller* AI, Int idx );
		Int GetNumStates( Controller* AI );
		String GetLatentAction( Controller* AI );
		void SetProfileColumn( Int ColumnIdx );
		Float GetProfileColumnCoord();
		void DrawProfileText( String Text, Bool Highlight, Canvas* Canvas );
		void DrawProfileHeaderText( String Text, Canvas* Canvas, Float OldCurY );
		void DrawProfileTitle( Float XL, Float YL, Canvas* Canvas );
		void DrawCurrentProfile( ProfileFunc ProfileFunc, UtilityFunc UtilityFunc );
		void Profile( Name Keyword, String Target, Name SubTarget, Int idx, ProfileData Profile );
		void DrawProfiles( Int idx );
		void Profiles( Float TimeToDisplay );
		void SloMo( Float T );
		void ResetGrinder( Byte Id );
		void IncrementGrinder( Byte Id );
		SFXHeavyWeapon* GetHeavyWeapon(, SFXInventoryManager* InvManager, BioPlayerController* Controller, SFXHeavyWeapon* HWeapon, SFXHeavyWeapon* FoundWeapon );
		void ProfileUtility();
		void ProfileHandler();
	};

	enum EAxisBuffer
	{
		AxisBuffer_LX,
		AxisBuffer_LY,
		AxisBuffer_RX,
		AxisBuffer_RY,
	};

	struct DebugMenuEntry
	{
		String Name; //offset = 0, size = 12
		String Command; //offset = 12, size = 12
	};

	struct StaticKeyBind
	{
		Name Name; //offset = 0, size = 8
		String Command; //offset = 8, size = 12
		Bool Control: 1; //offset = 20, size = 4
		Bool Shift: 1; //offset = 20, size = 4
		Bool Alt: 1; //offset = 20, size = 4
		Bool bDebug: 1; //offset = 20, size = 4
	};

	class BioPlayerInput: public PlayerInput
	{
		DECLARE_PACKAGE_CLASS( BioPlayerInput, PlayerInput, SFXGame )

	public:

		Byte bWantsToZoom; //offset = 336, size = 1
		Float aGuiStrafe; //offset = 340, size = 4
		Float aGuiBaseY; //offset = 344, size = 4
		Float aGuiTurn; //offset = 348, size = 4
		Float aGuiLookUp; //offset = 352, size = 4
		Float aGuiMouseX; //offset = 356, size = 4
		Float aGuiMouseY; //offset = 360, size = 4
		Float AxisBuffer[6]; //offset = 364, size = 4
		Float GuiDeadzone; //offset = 388, size = 4
		Map_Mirror InputTimers; //offset = 392, size = 20
		Int m_KeyInputDisabled; //offset = 412, size = 4
		Array<StaticKeyBind> StaticConsoleBinds; //offset = 416, size = 12
		Array<StaticKeyBind> StaticPCBinds; //offset = 428, size = 12
		Int m_nCurConvSelection; //offset = 440, size = 4
		Float m_fConversationReplyLeftRight; //offset = 444, size = 4
		Float m_fConversationReplyUpDown; //offset = 448, size = 4
		Float m_fQuickOrderTime; //offset = 452, size = 4
		Name m_nmMappedPower; //offset = 456, size = 8
		Name m_nmMappedPower2; //offset = 464, size = 8
		Name m_nmMappedPower3; //offset = 472, size = 8
		Array<DebugMenuEntry> DebugMenu; //offset = 480, size = 12
		Array<DebugMenuEntry> DebugSubMenu; //offset = 492, size = 12
		InterpCurveFloat LookStickResponseCurve; //offset = 504, size = 16
		Float AccumulatedRotationSpeed; //offset = 520, size = 4
		Vector AccumulatedAimVector; //offset = 524, size = 12
		Bool bUseMouseDampening: 1; //offset = 536, size = 4
		InterpCurveFloat MouseDampeningCurve; //offset = 540, size = 16
		Int CoverRemapThresholdPC; //offset = 556, size = 4
		Int CoverRemapThreshold; //offset = 560, size = 4

		void GhostMoveDown( Bool bState );
		void GhostMoveUp( Bool bState );
		void CancelReload();
		void RemapControlsByRotation( Rotator DeltaRot, Float NewRight, Float NewUp, Vector Controls, Vector NewControls );
		void UpdateViewRotation( Float DeltaTime, Rotator Kickback, Rotator KickbackFade, SFXPlayerCamera* CamManager );
		void PlayerInput( Float DeltaTime, Vector CamLoc, Rotator CamRot );
		void PostProcessInput( Float DeltaTime, BioPawn* BP, Bool bForceZoom, Bool bForceNoZoom );
		void AdjustMouseSensitivity( Float FOVScale, SFXCameraInput* Input );
		void PreProcessInput( Float DeltaTime, SFXWeapon* Weapon, SFXCameraInput* Input, Float RawStickFactor, Float StickFactor, Float fRemappedX, Float fRemappedY, Float StickMag, Float X, Float Y, Int idx );
		Float ComputeStickResponse( Float RawStickValue, SFXCameraInput* Input, Float DeltaTime, Float DesiredSpeed, Float AngleDelta, Vector NewAimVector );
		Bool IsKeyInputIgnored();
		void IgnoreKeyInput( Bool bValue );
		void SetInputDisabled( Bool bValue );
		Bool GetInputDisabled();
		void DebugExecInputCommands( String Cmd, Bool bButtonPressed );
		String GetBind( Name Key, Bool Control, Bool Shift, Bool Alt );
		Bool IsCombatEnabled();
		Bool ActivatePower( Name nmPower, Actor* oTarget, Vector vTargetLocation, Vector vOriginalCameraLocation, Rotator rOriginalCameraRotation );
	};

	enum EGeneralSelectionMode
	{
		BIO_SELECTION_MODE_INACTIVE,
		BIO_SELECTION_MODE_NORMAL,
	};

	class BioPlayerSelection: public Object
	{
		DECLARE_PACKAGE_CLASS( BioPlayerSelection, Object, SFXGame )

	public:

		Array<Actor*> m_lSelectionsInRange; //offset = 60, size = 12
		Byte m_eCurrentSelectionMode; //offset = 72, size = 1
		Byte m_ePreviousSelectionMode; //offset = 73, size = 1
		Actor* m_oCurrentSelectionTarget; //offset = 76, size = 4
		Actor* m_oLastSelectionTarget; //offset = 80, size = 4
		Bool m_bCurrentSelectionIsCombatTarget: 1; //offset = 84, size = 4
		Bool m_bCurrentSelectionObstructed: 1; //offset = 84, size = 4
		LensFlareComponent* SelectionFlareComp; //offset = 88, size = 4
		Float SelectionFarRange; //offset = 92, size = 4
		Float SelectionFarAngle; //offset = 96, size = 4
		Float SelectionCloseRange; //offset = 100, size = 4
		Float SelectionCloseAngle; //offset = 104, size = 4

		void SetSelectionIconMaterialParam( Name Param, Int Value );
		Bool IsSelectable( Actor* oTarget );
		void UpdateSelection();
		void FindCurrentSelectionTarget();
	};

	class CoverGoalConstraint: public Object
	{
		DECLARE_PACKAGE_CLASS( CoverGoalConstraint, Object, SFXGame )

	public:

		Int ConstraintEvaluationPriority; //offset = 60, size = 4

		String GetDumpString();
		void Init( Goal_AtCover* GoalEvaluator );
	};

	struct EnemyData
	{
		Pawn* Enemy; //offset = 0, size = 4
		Float Distance; //offset = 4, size = 4
		Vector Direction; //offset = 8, size = 12
	};

	class CovGoal_AvoidEnemies: public CoverGoalConstraint
	{
		DECLARE_PACKAGE_CLASS( CovGoal_AvoidEnemies, CoverGoalConstraint, SFXGame )

	public:

		Array<EnemyData> Enemies; //offset = 64, size = 12

		void Init( Goal_AtCover* GoalEvaluator );
	};

	struct ValidEnemyCacheDatum
	{
		BioPawn* EnemyPawn; //offset = 0, size = 4
		CoverInfo EnemyCover; //offset = 4, size = 8
	};

	class CovGoal_Enemies: public CoverGoalConstraint
	{
		DECLARE_PACKAGE_CLASS( CovGoal_Enemies, CoverGoalConstraint, SFXGame )

	public:

		Array<ValidEnemyCacheDatum> ValidEnemyCache; //offset = 64, size = 12

		void Init( Goal_AtCover* GoalEvaluator );
	};

	class CovGoal_GoalProximity: public CoverGoalConstraint
	{
		DECLARE_PACKAGE_CLASS( CovGoal_GoalProximity, CoverGoalConstraint, SFXGame )

	public:

		Float BestGoalDist; //offset = 64, size = 4
		Float MinGoalDist; //offset = 68, size = 4
		Float MaxGoalDist; //offset = 72, size = 4
		Bool bHardLimits: 1; //offset = 76, size = 4
	};

	class CovGoal_MovementDistance: public CoverGoalConstraint
	{
		DECLARE_PACKAGE_CLASS( CovGoal_MovementDistance, CoverGoalConstraint, SFXGame )

	public:

		Float BestCoverDist; //offset = 64, size = 4
		Float MaxCoverDist; //offset = 68, size = 4
		Float MinCoverDist; //offset = 72, size = 4
		Bool bMoveTowardGoal: 1; //offset = 76, size = 4
		Bool bHardConstraint: 1; //offset = 76, size = 4
		Bool bIgnoreCoverOutOfRange: 1; //offset = 76, size = 4
		Float MinDistTowardGoal; //offset = 80, size = 4
	};

	class CovGoal_TeammateProximity: public CoverGoalConstraint
	{
		DECLARE_PACKAGE_CLASS( CovGoal_TeammateProximity, CoverGoalConstraint, SFXGame )

	public:

		Float fTeammateMinDistanceSq; //offset = 64, size = 4
		Float fProximityPenalty; //offset = 68, size = 4
		Float fSquadLeaderProximityPenalty; //offset = 72, size = 4
		Bool bRestrictMaxDistance: 1; //offset = 76, size = 4
		Float fTeammateMaxDistanceSq; //offset = 80, size = 4
		Float fMaxDistancePenalty; //offset = 84, size = 4
	};

	class Goal_AtCover: public PathGoalEvaluator
	{
		DECLARE_PACKAGE_CLASS( Goal_AtCover, PathGoalEvaluator, SFXGame )

	public:

		SFXAI_NativeBase* AI; //offset = 80, size = 4
		CoverSlotMarker* BestMarker; //offset = 84, size = 4
		Int BestRating; //offset = 88, size = 4
		Int MaxToRate; //offset = 92, size = 4
		Int NumMarkersTested; //offset = 96, size = 4
		Actor* TetherActor; //offset = 100, size = 4
		Array<CoverGoalConstraint*> CoverGoalConstraints; //offset = 104, size = 12
		Bool MoveTowardsGoalActor: 1; //offset = 116, size = 4

		String GetDumpString(, Int idx, String Str );
		void AddCoverGoalConstraint( CoverGoalConstraint* Constraint );
		void RateSlotMarker( CoverSlotMarker* Marker, Pawn* Pawn, Int BaseRating );
		void InitNative();
		void Init( SFXAI_NativeBase* oAI, Actor* GoalActor, Int I );
	};

	class CovGoal_WeaponRange: public CoverGoalConstraint
	{
		DECLARE_PACKAGE_CLASS( CovGoal_WeaponRange, CoverGoalConstraint, SFXGame )

	public:

		Bool bHardConstraint: 1; //offset = 64, size = 4
		Float fClosePenalty; //offset = 68, size = 4
		Float fFarPenalty; //offset = 72, size = 4
		Float fIdealWeaponRange; //offset = 76, size = 4
		Float fLongWeaponRange; //offset = 80, size = 4
		Float fShortWeaponRange; //offset = 84, size = 4

		void Init( Goal_AtCover* GoalEvaluator );
	};

	class Goal_AtGoHereCover: public Goal_AtCover
	{
		DECLARE_PACKAGE_CLASS( Goal_AtGoHereCover, Goal_AtCover, SFXGame )

	public:
	};

	class Goal_AwayFromPosition: public PathGoalEvaluator
	{
		DECLARE_PACKAGE_CLASS( Goal_AwayFromPosition, PathGoalEvaluator, SFXGame )

	public:

		Vector AvoidPos; //offset = 80, size = 12
		Vector AvoidDir; //offset = 92, size = 12
		Int MaxDist; //offset = 104, size = 4
		NavigationPoint* BestNode; //offset = 108, size = 4
		Int BestRating; //offset = 112, size = 4

		void Recycle();
		Bool FleeFrom( Pawn* P, Vector InAvoidPos, Int InMaxDist, Goal_AwayFromPosition* Eval );
	};

	const char* ENABLE_AI_REQUESTED_BY_DEATH = 16;
	const char* ENABLE_AI_REQUESTED_BY_GAME_EFFECT = 8;
	const char* ENABLE_AI_REQUESTED_BY_KISMET = 4;
	const char* ENABLE_AI_REQUESTED_BY_CONVERSATION = 2;
	const char* ENABLE_AI_REQUESTED_BY_UNKNOWN = 1;

	class SFXAI_NativeBase: public BioAiController
	{
		DECLARE_PACKAGE_CLASS( SFXAI_NativeBase, BioAiController, SFXGame )

	public:

		Byte CurrentCustomAction; //offset = 1072, size = 1
		Array<Class*> CustomActionClasses; //offset = 1076, size = 12
		Array<BioCustomAction*> CustomActions; //offset = 1088, size = 12
		NavigationPoint* m_AIGoHereTarget; //offset = 1100, size = 4
		Bool m_bAIGoHereTargetArrived: 1; //offset = 1104, size = 4
		Bool m_bDisableAIOnRagdoll: 1; //offset = 1104, size = 4
		Bool m_bCanSkipNodes: 1; //offset = 1104, size = 4
		Int m_nMantleCostModifier; //offset = 1108, size = 4
		Float LastShotAtTime; //offset = 1112, size = 4
		Int m_nEnabledFlags; //offset = 1116, size = 4
		Float m_fNextTimeForReachableCheck; //offset = 1120, size = 4

		void DebugResetNavWeights();
		void SetMoveTimer( Vector vMove );
		void UpdateMovementActions();
		Bool IsSpecialMoveAfterMoveTarget();
		Bool CanSkipCurrentPathNode();
		void SmoothPathMovement();
		void MoveTowardLocation( Vector vLocation, Float fOffset );
		Bool AdjustSteeringMoveSpeed( Vector vSteering );
		Bool GetSteeringVector( Vector vSteering );
		void GetActorToFollow( Actor* oActor, Vector vLocation );
		Bool EnableAI( Bool bEnable, Int nRequestedBy, Int nOriginalFlags );
		Bool CanInterruptCurrentState();
		Bool CanDoCustomAction( Byte CAction );
		Bool GetCurrentCustomAction( BioCustomAction* pAction );
		Bool IsActorInLevel( Actor* oActor, Level* oLevel );
		void BioClearCrossLevelReferences( Level* oLevel );
	};

	class SFXPath_AvoidClaimedCover: public PathConstraint
	{
		DECLARE_PACKAGE_CLASS( SFXPath_AvoidClaimedCover, PathConstraint, SFXGame )

	public:

		Bool AvoidClaimedCover( BioPawn* P, SFXPath_AvoidClaimedCover* Con );
	};

	struct EnemyCoverInfo
	{
		BioPawn* Enemy; //offset = 0, size = 4
		CoverInfo Cover; //offset = 4, size = 8
	};

	class SFXPath_AvoidFireFromCover: public PathConstraint
	{
		DECLARE_PACKAGE_CLASS( SFXPath_AvoidFireFromCover, PathConstraint, SFXGame )

	public:

		SFXAI_Core* AI; //offset = 68, size = 4
		Array<EnemyCoverInfo> EnemyList; //offset = 72, size = 12

		void Recycle();
		Bool AvoidFireFromCover( Pawn* P, Bool bCheckPlayerOnly, SFXPath_AvoidFireFromCover* Con, SFXAI_Core* oAI, BioPawn* Enemy, EnemyCoverInfo EnemyInfo, Int I );
	};

	class SFXPath_AvoidPlayer: public PathConstraint
	{
		DECLARE_PACKAGE_CLASS( SFXPath_AvoidPlayer, PathConstraint, SFXGame )

	public:

		Bool AvoidPlayer( BioPawn* Pawn, SFXPath_AvoidPlayer* Constraint );
	};

	class SFXPath_WithinPlaypen: public PathConstraint
	{
		DECLARE_PACKAGE_CLASS( SFXPath_WithinPlaypen, PathConstraint, SFXGame )

	public:

		Bool m_bOnlyAvoidSubtractive: 1; //offset = 68, size = 4

		Bool WithinPlaypen( BioPawn* P, Bool bAvoidSubtractive, SFXPath_WithinPlaypen* Con );
	};

	class BioSquadAPI: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioSquadAPI, Actor, SFXGame )

	public:
	};

	enum ePawnValidType
	{
		PVT_Invalid,
		PVT_ValidPawn,
	};

	enum EBioTacticalAction
	{
		BIO_TACACT_NONE,
		BIO_TACACT_SHOOT,
		BIO_TACACT_GRENADE,
	};

	enum EBioCapMode
	{
		BIO_CAPMODE_WEAPON,
		BIO_CAPMODE_BIOTICS,
		BIO_CAPMODE_TECH,
		BIO_CAPMODE_COMBAT,
	};

	enum ESquadIcons
	{
		BIO_SQUADICON_INVALID,
		BIO_SQUADICON_HOLD,
		BIO_SQUADICON_MOVETO,
		BIO_SQUADICON_FOLLOW,
	};

	enum ESwitchToWeapon
	{
		STW_Pistol,
		STW_ShotGun,
		STW_AssaultRifle,
	};

	enum eATTACK_TYPE
	{
		AI_ATTACK_TYPE_NONE,
		AI_ATTACK_TYPE_SNIPER,
		AI_ATTACK_TYPE_ACCURATE,
		AI_ATTACK_TYPE_INACCURATE,
	};

	struct MemberData
	{
		Pawn* SquadMember; //offset = 0, size = 4
		BioTacticalMoveToIndicator* oDestinationIndicator; //offset = 4, size = 4
		Bool bMoveOrderAssigned: 1; //offset = 8, size = 4
		Name nmPower; //offset = 12, size = 8
		Vector vTarget; //offset = 20, size = 12
		Vector vHoldPosition; //offset = 32, size = 12
		Actor* oOrderedAttackTarget; //offset = 44, size = 4
	};

	class BioBaseSquad: public BioSquadAPI
	{
		DECLARE_PACKAGE_CLASS( BioBaseSquad, BioSquadAPI, SFXGame )

	public:

		Array<MemberData> Members; //offset = 508, size = 12
		Bool bSquadEnabled: 1; //offset = 520, size = 4
		Bool m_bAllowPawns: 1; //offset = 520, size = 4
		Bool m_bAllowVehicles: 1; //offset = 520, size = 4
		Bool m_bEngagedHostileAction: 1; //offset = 520, size = 4
		Class* SquadFaction; //offset = 524, size = 4
		Array<BioBaseSquad*> m_aPerceivedSquads; //offset = 528, size = 12
		Array<BioPlaypenVolume*> PlaypenVolumes; //offset = 540, size = 12
		Color PlaypenAdditiveVolumeColour; //offset = 552, size = 4
		Color PlaypenSubtractiveVolumeColour; //offset = 556, size = 4
		Color SquadMemberLineColour; //offset = 560, size = 4
		Map_Mirror m_aSquadPlayPen; //offset = 564, size = 20
		Int ObjVersion; //offset = 584, size = 4
		BioBaseSquad* m_pHackedSquad; //offset = 588, size = 4
		Float m_fThreatModifier; //offset = 592, size = 4

		void DisableSquad( BioAiController* AI, SFXAI_NativeBase* oSFXAI );
		void EnableSquad( BioAiController* AI, SFXAI_NativeBase* oSFXAI );
		Int GetMaxHazardLevel();
		Class* GetSaveObjectClass();
		BioBaseSquad* MakeHackable();
		Byte IsBioPawnValid( Actor* oTestActor, Bool bRequiresTargetFlag, BioPawn* oPawn, BioVehicleBase* oCar );
		void GenerateProximityAlarmEvent( Pawn* oMember, Actor* oTarget, Int nRelationship, Int nIndex, Array<Int> ActivateIndices );
		void MemberRemoved( Pawn* oPawn, BioPawn* Pawn );
		void RemoveDyingMember( Pawn* oPawn );
		Int AddMember( Pawn* Pawn, Bool bCheckPlaypens, BioBaseSquad* OldSquad, Int SquadIdx, BioAiController* AI, SFXAI_NativeBase* oSFXAI, BioPawn* BP );
		Int GetNumberOfLiveMembers();
		BioEpicPawnBehavior* GetPawnBehavior( Actor* oActor );
		BioBaseSquad* GetSquad( Actor* oActor );
		Pawn* FindSquadMemberByTag( Name nmTag );
		Bool Died( Pawn* Member, Controller* Killer, Int idx, BioAiController* oMember );
		void NotifyPlaypenChanged( BioAiController* AI, SFXAI_Core* oSFXAI );
		void NotifyNoEnemiesPerceived();
		void NotifyEnemyPerceived();
		Actor* GetPlaypenReturnPoint( Pawn* oPawn );
		Actor* GetPlaypenNavOrigin( Pawn* oPawn );
		void UpdatePlaypen();
		Bool IsVolumeInPlaypen( BioPlaypenVolume* Volume );
		void RemoveVolumeFromPlaypen( BioPlaypenVolume* Volume );
		void AddVolumeToPlaypen( BioPlaypenVolume* Volume );
		Bool HasPlaypen();
		Bool IsActorInSubtractivePlaypen( Actor* oActor );
		Bool IsActorInPlaypen( Actor* oActor );
		Bool IsPositionInSubtractivePlaypen( Vector vLocation );
		Bool IsPositionInPlaypen( Vector vLocation );
		void PerceivedPawns( Pawn* oPawn );
		void SquadMembers( BioAiController* oController );
		Bool CanShoot( Pawn* oSource, Actor* oTarget );
		Bool CanShootExposed( Pawn* oSource, Actor* oTarget, Int bExposed );
		void RemoveSquadFromPerception( BioBaseSquad* pSquad );
		Bool IsPawnPerceived( Pawn* pPawn );
		Bool IsSquadPerceived( BioBaseSquad* pSquad );
		void AddSquadToPerception( BioBaseSquad* pSquad, Pawn* pSource, Pawn* pTarget );
		void SetMemberMoveIndicator( Int nIndex, BioTacticalMoveToIndicator* oIndicator );
		BioTacticalMoveToIndicator* GetMemberMoveIndicator( Int nIndex );
		Bool RemoveMemberByIndex( Int nIndex );
		Bool RemoveMember( Pawn* pPawn );
		void ClearSquad();
		Int GetMemberIndex( Pawn* pPawn );
		Pawn* GetMember( Int nIndex );
		Pawn* GetSquadLeader();
		Int GetHackedSquadSize();
		Int GetSquadSize();
		Bool IsInSquad( Pawn* pPawn );
	};

	class BioFaction: public Object
	{
		DECLARE_PACKAGE_CLASS( BioFaction, Object, SFXGame )

	public:

		Byte SquadFaction; //offset = 60, size = 1
		Array<Byte> SquadRelations; //offset = 64, size = 12
		Texture2D* SquadIcon; //offset = 76, size = 4
		Bool m_bIsImmuneToPhysics: 1; //offset = 80, size = 4

		Bool IsFriendly( Byte Type );
		Bool IsHostile( Byte Type );
	};

	class BioFaction_Hacked: public BioFaction
	{
		DECLARE_PACKAGE_CLASS( BioFaction_Hacked, BioFaction, SFXGame )

	public:
	};

	class BioFaction_Player: public BioFaction
	{
		DECLARE_PACKAGE_CLASS( BioFaction_Player, BioFaction, SFXGame )

	public:
	};

	class BioFaction_Vehicle: public BioFaction
	{
		DECLARE_PACKAGE_CLASS( BioFaction_Vehicle, BioFaction, SFXGame )

	public:
	};

	enum EBioGameOverCondition
	{
		BIO_GAME_OVER_CONDITION_PLAYER_PAWN_DIES,
		BIO_GAME_OVER_CONDITION_PLAYER_SQUAD_DIES,
	};

	enum EExperienceSourceType
	{
		EXPSourceType_SimpleDeath,
		EXPSourceType_SkillUse,
		EXPSourceType_QuestCompletion,
	};

	struct SquadTargetData
	{
		Actor* oTarget; //offset = 0, size = 4
		Vector vLocation; //offset = 4, size = 12
		Int nActionIcon; //offset = 16, size = 4
		Int nSquadIcon; //offset = 20, size = 4
		Bool bHidden: 1; //offset = 24, size = 4
		Bool bActive: 1; //offset = 24, size = 4
		Float fTimeOut; //offset = 28, size = 4
	};

	class BioPlayerSquad: public BioBaseSquad
	{
		DECLARE_PACKAGE_CLASS( BioPlayerSquad, BioBaseSquad, SFXGame )

	public:

		BioPawn* m_playerPawn; //offset = 596, size = 4
		BioPawn* m_InitialPlayerPawn; //offset = 600, size = 4
		Pawn* m_oSquadLeader; //offset = 604, size = 4
		Bool m_bSquadHasVehicle: 1; //offset = 608, size = 4
		Float m_fPerceptionTolerance; //offset = 612, size = 4
		Bio2DA* m_oCreditsTable; //offset = 616, size = 4
		Float m_fRevivalRange; //offset = 620, size = 4
		Bool m_bCombatEnabled: 1; //offset = 624, size = 4
		SquadTargetData m_aSquadTargets[3]; //offset = 628, size = 32
		SquadTargetData m_aSimpleSquadTargets[3]; //offset = 724, size = 32
		Byte m_eGameOverCondition; //offset = 820, size = 1
		Float m_fPercentHealthOnResurrection; //offset = 824, size = 4
		Float m_fPercentHealthOnEndOfCombat; //offset = 828, size = 4
		ForceFeedbackWaveform* m_CoverWaveForm; //offset = 832, size = 4

		void MemberRemoved( Pawn* oPawn, BioPawn* Pawn, BioWorldInfo* oWorldInfo, MassEffectGuiManager* oGuiManager );
		Int GetSquadSizeFromScript(, Int nIndex, Int nCount, Pawn* ThePawn );
		Int GetSquadSize();
		Int AddMember( Pawn* Pawn, Bool bCheckPlaypens, Int nMemberIndex, SFXAI_Henchman* oController, BioPawn* oSquadMember );
		Bool IsFieldingInitialPlayerPawn();
		Float GetPercentHealthOnResurrection();
		Pawn* GetSquadLeader();
		Bool SetSquadLeader( Pawn* pPawn );
		void SquadExitCombatMode( BioAiController* oMember, BioPawn* oMemberPawn, SFXGame* GameInfo );
		void SquadEnterCombatMode( Bool bEngageEnemy, BioAiController* oMember );
		Class* GetSaveObjectClass();
		Int GetSquadScanAbility();
		void RemoveDyingMember( Pawn* oPawn );
		Bool Died( Pawn* pPawn, Controller* Killer );
		Bool LookupCredits( Int nPlayerSquadLevel, Name nmCREDClass, Int nCredits, Bool bWhetherSucceeded );
		void NotifyNoEnemiesPerceived( BioPawn* Member, MemberData MD );
		void NotifyEnemyPerceived();
		void onPlayerEnterCover( BioPlayerController* pController );
		Bool OnPlayerSwitchStance( Byte FromState, Byte ToState );
	};

	class BioSquadAI: public BioBaseSquad
	{
		DECLARE_PACKAGE_CLASS( BioSquadAI, BioBaseSquad, SFXGame )

	public:

		Bool EnableSquadAILogging: 1; //offset = 596, size = 4
	};

	class BioSquadHoldMarker: public NavigationPoint
	{
		DECLARE_PACKAGE_CLASS( BioSquadHoldMarker, NavigationPoint, SFXGame )

	public:

		InterpActor* MyLift; //offset = 776, size = 4
		Vector LiftOffset; //offset = 780, size = 12
		String BaseTag; //offset = 792, size = 12

		void PostBeginPlay();
		void SetBaseByTag();
	};

	class BioSquadLinesComponent: public PrimitiveComponent
	{
		DECLARE_PACKAGE_CLASS( BioSquadLinesComponent, PrimitiveComponent, SFXGame )

	public:

		Bool bInited: 1; //offset = 448, size = 4
		Color vPlayPenLineColor; //offset = 452, size = 4
		Color vSquadLeaderColor; //offset = 456, size = 4
		Color vSquadMemberColor; //offset = 460, size = 4
		Color vSquadAssetColor; //offset = 464, size = 4
		Color vDynamicCoverColor; //offset = 468, size = 4
	};

	enum ESFXRigidBodyMode
	{
		SFXRigidBodyMode_Animated,
		SFXRigidBodyMode_Motorized,
	};

	enum EBodyStance
	{
		BS_FullBody,
	};

	enum EWalkingSpeedMode
	{
		eWalkingSpeedMode_ExploreRun,
		eWalkingSpeedMode_ExploreWalk,
		eWalkingSpeedMode_ExploreStorming,
		eWalkingSpeedMode_ExploreCrouched,
		eWalkingSpeedMode_CombatRun,
		eWalkingSpeedMode_CombatWalk,
		eWalkingSpeedMode_CombatStorming,
	};

	enum eAIBehaviour
	{
		AIB_None,
	};

	enum EActionState
	{
		ActionState_Explore,
		ActionState_Combat,
	};

	enum EAimNodes
	{
		AimNode_Cover,
		AimNode_Head,
		AimNode_LeftShoulder,
		AimNode_RightShoulder,
		AimNode_Chest,
	};

	struct AimAssistBox
	{
		Byte NodeType; //offset = 0, size = 1
		Float Width; //offset = 4, size = 4
		Float Height; //offset = 8, size = 4
		Float SoftMargin; //offset = 12, size = 4
	};

	struct RigidBodyCallback
	{
		Int nPriority; //offset = 0, size = 4
		RBCallback RBCallback; //offset = 4, size = 12
	};

	struct AttackReservation
	{
		Int nID; //offset = 0, size = 4
		Int nTicketCost; //offset = 4, size = 4
		Float fTimeUntilExpiry; //offset = 8, size = 4
		Bool bUsingTicket: 1; //offset = 12, size = 4
	};

	struct RootMotionOverrideEntry
	{
		AnimNode* Node; //offset = 0, size = 4
		Byte RMMode; //offset = 4, size = 1
		Byte RMRMode; //offset = 5, size = 1
	};

	struct BodyStance
	{
		Byte StanceID; //offset = 0, size = 1
		Name AnimName; //offset = 4, size = 8
	};

	struct ReactionPart
	{
		Name BodyPart; //offset = 0, size = 8
		Array<Name> BoneNames; //offset = 8, size = 12
	};

	class BioPawn: public Pawn
	{
		DECLARE_PACKAGE_CLASS( BioPawn, Pawn, SFXGame )

	public:
		struct Broken
		{
		};

		struct BioPawn
		{
			/*
			UpdateCombatMode
			*/
		};

		struct Downed
		{
			/*
			ForceEndRagdoll
			IsPlayingReaction
			CastDeathPower
			OnEnterRagdoll
			Died
			TakeDamage
			FellOutOfWorld
			BreathTimer
			*/
		};

		struct Dying
		{
			/*
			Tick
			TakeDamage
			Timer
			OnEnterRagdoll
			*/
		};

		struct RagdollRecovery
		{
			/*
			ForceEndRagdoll
			UpdateRagdollState
			NotifyRagdollRecoverAnimationComplete
			PoppedState
			EndState
			*/
		};

		struct WaitForRagdollRecovery
		{
			/*
			ForceEndRagdoll
			ReadyToRecover
			*/
		};

		struct InRagdoll
		{
			/*
			ForceEndRagdoll
			SendKismetRagdollEvent
			PlayHit
			EndState
			BeginState
			*/
		};

		struct LandingState
		{
			/*
			NotifyFallingAnimationComplete
			ShouldPlayFallingAnim
			EndState
			*/
		};

		struct FallingState
		{
			/*
			Landed
			ShouldPlayFallingAnim
			BeginState
			*/
		};


		Array<Name> AimNodes; //offset = 1052, size = 12
		Array<ReactionPart> ReactionBones; //offset = 1064, size = 12
		Name RightHandSocketName; //offset = 1076, size = 8
		Name LeftHandSocketName; //offset = 1084, size = 8
		Array<Name> AttachSlots; //offset = 1092, size = 12
		Array<AnimNodeSlot*> BodyStanceNodes; //offset = 1104, size = 12
		Class* AIController; //offset = 1116, size = 4
		Class* FactionClass; //offset = 1120, size = 4
		Class* OldFactionClass; //offset = 1124, size = 4
		SFXLoadoutData* Loadout; //offset = 1128, size = 4
		Byte m_eAIBehaviour; //offset = 1132, size = 1
		Byte m_eRagdollRecoverBoneAxis; //offset = 1133, size = 1
		Byte m_eRagdollRecoverDirSwapBoneAxis; //offset = 1134, size = 1
		Byte CurrentSlotDirection; //offset = 1135, size = 1
		Byte CoverDirection; //offset = 1136, size = 1
		Byte CoverType; //offset = 1137, size = 1
		Byte CoverAction; //offset = 1138, size = 1
		Byte m_eUseRollingInPhysicsMode; //offset = 1139, size = 1
		Byte m_eClassification; //offset = 1140, size = 1
		Byte LastCoverType; //offset = 1141, size = 1
		Float TechResistance; //offset = 1144, size = 4
		Float BioticResistance; //offset = 1148, size = 4
		Bool bSleeping: 1; //offset = 1152, size = 4
		Bool bShouldSpawnWeapons: 1; //offset = 1152, size = 4
		Bool bFullyInitialized: 1; //offset = 1152, size = 4
		Bool bIconicAppearance: 1; //offset = 1152, size = 4
		Bool bCanPlayAnimatedReactions: 1; //offset = 1152, size = 4
		Bool bCanPlayPhysicsHitReactions: 1; //offset = 1152, size = 4
		Bool bSpawnPHATInstance: 1; //offset = 1152, size = 4
		Bool bKillOnRagdoll: 1; //offset = 1152, size = 4
		Bool bCollidesAfterDeath: 1; //offset = 1152, size = 4
		Bool bSaveMe: 1; //offset = 1152, size = 4
		Bool bOverrideHeadMat: 1; //offset = 1152, size = 4
		Bool bOverrideBodyMats: 1; //offset = 1152, size = 4
		Bool m_bOldUpdateSkelWhenNotRendered: 1; //offset = 1152, size = 4
		Bool m_bInvertRagdollRecoverBoneAxis: 1; //offset = 1152, size = 4
		Bool m_bRecoverDirSwap: 1; //offset = 1152, size = 4
		Bool m_bInvertRagdollRecoverDirSwapBoneAxis: 1; //offset = 1152, size = 4
		Bool m_bCanCleanupCorpse: 1; //offset = 1152, size = 4
		Bool m_bEnableLookAtTargeting: 1; //offset = 1152, size = 4
		Bool m_bEnableStartRootMotion: 1; //offset = 1152, size = 4
		Bool m_bEnableStopRootMotion: 1; //offset = 1152, size = 4
		Bool m_bUseWallSlidingSpeedAdj: 1; //offset = 1152, size = 4
		Bool m_bUseBoneCameraHookOffset: 1; //offset = 1152, size = 4
		Bool m_bHideWithCameraCollision: 1; //offset = 1152, size = 4
		Bool m_bRagDollEnabled: 1; //offset = 1152, size = 4
		Bool m_bInConversation: 1; //offset = 1152, size = 4
		Bool m_bAutoLookAtPlayer: 1; //offset = 1152, size = 4
		Bool m_bDisableLookAtNotice: 1; //offset = 1152, size = 4
		Bool bWeaponDebug_Accuracy: 1; //offset = 1152, size = 4
		Bool bWeaponDebug_DamageRadius: 1; //offset = 1152, size = 4
		Bool bWasInCover: 1; //offset = 1152, size = 4
		Bool bIsInStationaryCover: 1; //offset = 1152, size = 4
		Bool bIgnoreDuringCoverSelection: 1; //offset = 1152, size = 4
		Bool m_bAlwaysTick: 1; //offset = 1156, size = 4
		Bool m_bRollingSoundUsed: 1; //offset = 1156, size = 4
		Bool m_bDroneLanded: 1; //offset = 1156, size = 4
		Bool m_bClassificationOverriden: 1; //offset = 1156, size = 4
		Bool m_bAllowedToLeavePlaypen: 1; //offset = 1156, size = 4
		Bool m_bPlayCustomActivationAnim: 1; //offset = 1156, size = 4
		Bool bEnableHitReactionBoneSprings: 1; //offset = 1156, size = 4
		Bool bDisableVocEvents: 1; //offset = 1156, size = 4
		Bool bAimBackDisabledTransitions: 1; //offset = 1156, size = 4
		Bool bDisableMeshTranslationChanges: 1; //offset = 1156, size = 4
		Float fSleepPerceptionDistance; //offset = 1160, size = 4
		Bool bScalePowers: 1; //offset = 1164, size = 4
		Bool bIsStealthed: 1; //offset = 1164, size = 4
		Bool bIgnoreSelectionMaxRange: 1; //offset = 1164, size = 4
		Bool bHasShields: 1; //offset = 1164, size = 4
		Bool bIsSniping: 1; //offset = 1164, size = 4
		Bool bPlayDeathAnimation: 1; //offset = 1164, size = 4
		Bool bRootMotionOverriden: 1; //offset = 1164, size = 4
		Bool m_bTurnInPlaceRequested: 1; //offset = 1164, size = 4
		Bool m_bSafeTeleportQueued: 1; //offset = 1164, size = 4
		Bool m_bLookAtNotice: 1; //offset = 1164, size = 4
		Bool m_bNoWrinkleMapData: 1; //offset = 1164, size = 4
		Bool bPortArmsEnabled: 1; //offset = 1164, size = 4
		Bool bCanUsePortArms: 1; //offset = 1164, size = 4
		Bool bInPortArms: 1; //offset = 1164, size = 4
		Bool bPlayingPortArmsAnim: 1; //offset = 1164, size = 4
		Bool m_bLastGoodInitalized: 1; //offset = 1164, size = 4
		Bool m_bBumpLastMoving: 1; //offset = 1164, size = 4
		Bool m_bRollingNotMoving: 1; //offset = 1164, size = 4
		Bool m_bIdleIsPlaying: 1; //offset = 1164, size = 4
		Bool m_bMovingIsPlaying: 1; //offset = 1164, size = 4
		Bool m_bPreviewBegun: 1; //offset = 1164, size = 4
		Bool bScalingToZero: 1; //offset = 1164, size = 4
		Bool bIsDead: 1; //offset = 1164, size = 4
		Bool m_bDeathPowerUsed: 1; //offset = 1164, size = 4
		Bool bIsCrawling: 1; //offset = 1164, size = 4
		Bool m_bRagdollEnteredPendingBodyFallSound: 1; //offset = 1164, size = 4
		NavigationPoint* PreRagdollAnchor; //offset = 1168, size = 4
		Name m_nmAIBehaviour; //offset = 1172, size = 8
		BioPawnType* PawnType; //offset = 1180, size = 4
		BioBaseSquad* Squad; //offset = 1184, size = 4
		Byte ActionState; //offset = 1188, size = 1
		Byte RigidBodyMode; //offset = 1189, size = 1
		Int CharacterLevel; //offset = 1192, size = 4
		BioPawnBehavior* m_oBehavior; //offset = 1196, size = 4
		Float FootstepCullDistance; //offset = 1200, size = 4
		Guid MyGuid; //offset = 1204, size = 16
		Array<MaterialInstance*> BodyMaterialInstances; //offset = 1220, size = 12
		Array<MaterialInstance*> HeadMaterialInstances; //offset = 1232, size = 12
		Weapon* WeaponFromLastGameState; //offset = 1244, size = 4
		Weapon* WeaponOnDeck; //offset = 1248, size = 4
		BioEventDispatcher* m_oEventDispatcher; //offset = 1252, size = 4
		Float WalkSpeed; //offset = 1256, size = 4
		Float TurnSpeed; //offset = 1260, size = 4
		Float CombatWalkSpeed; //offset = 1264, size = 4
		Float CombatGroundSpeed; //offset = 1268, size = 4
		Float DeathCrawlSpeed; //offset = 1272, size = 4
		Float CoverGroundSpeed; //offset = 1276, size = 4
		Float CoverCrouchGroundSpeed; //offset = 1280, size = 4
		Float CrouchGroundSpeed; //offset = 1284, size = 4
		Float StormSpeed; //offset = 1288, size = 4
		Float StormTurnSpeed; //offset = 1292, size = 4
		Float fMoveMag; //offset = 1296, size = 4
		Int DeathHitBoneIdx; //offset = 1300, size = 4
		Float LastAnimatedReactionTime; //offset = 1304, size = 4
		Controller* KilledBy; //offset = 1308, size = 4
		Class* KilledByDamageType; //offset = 1312, size = 4
		Vector KilledByHitLocation; //offset = 1316, size = 12
		Int m_nTalkedToCount; //offset = 1328, size = 4
		SkeletalMeshComponent* HeadMesh; //offset = 1332, size = 4
		BioMorphFace* MorphHead; //offset = 1336, size = 4
		SkeletalMeshComponent* m_oHairMesh; //offset = 1340, size = 4
		SkeletalMeshComponent* m_oHeadGearMesh; //offset = 1344, size = 4
		SkeletalMeshComponent* m_oVisorMesh; //offset = 1348, size = 4
		SkeletalMeshComponent* m_oFacePlateMesh; //offset = 1352, size = 4
		Array<SkeletalMeshComponent*> m_aoAccessories; //offset = 1356, size = 12
		Int TalentPoints; //offset = 1368, size = 4
		BioVisualEffect* m_LifeCrust; //offset = 1372, size = 4
		Float m_fLifeCrustCount; //offset = 1376, size = 4
		Float m_fRagdollRecoverPhysBlendTime; //offset = 1380, size = 4
		Name m_nmRagdollRecoverBone; //offset = 1384, size = 8
		Name m_nmRagdollRecoverDirSwapBone; //offset = 1392, size = 8
		Float m_fLookAtSpeed; //offset = 1400, size = 4
		Float m_fLookAtMinHoldTime; //offset = 1404, size = 4
		Float m_fLookAtMaxHoldTime; //offset = 1408, size = 4
		Float m_fLookAtMaxAngle; //offset = 1412, size = 4
		Float m_fLookAtHoldTime; //offset = 1416, size = 4
		Float m_fRunAnimPlaybackPos; //offset = 1420, size = 4
		Float m_fRunAnimPlaybackRate; //offset = 1424, size = 4
		Float m_fRunAnimPlaybackLen; //offset = 1428, size = 4
		Float m_fWalkAnimPlaybackPos; //offset = 1432, size = 4
		Float m_fWalkAnimPlaybackRate; //offset = 1436, size = 4
		Float m_fWalkAnimPlaybackLen; //offset = 1440, size = 4
		Float m_fWalkStopDistance; //offset = 1444, size = 4
		Float m_fRunStopDistance; //offset = 1448, size = 4
		Float m_fCollisionReadyHeight; //offset = 1452, size = 4
		Int m_nRootMotionEnabledCountDeprecated; //offset = 1456, size = 4
		Array<RootMotionOverrideEntry> RootMotionOverrides; //offset = 1460, size = 12
		BioGestureAnimSetMgr* m_pAnimSetMgr; //offset = 1472, size = 4
		Vector m_vSafeTeleportLocation; //offset = 1476, size = 12
		Float m_fLookMultiplier; //offset = 1488, size = 4
		BioLookAt* m_oLookAtData; //offset = 1492, size = 4
		MultiMap_Mirror m_mAnimsetRegistration; //offset = 1496, size = 20
		Float PortArmsTimer; //offset = 1516, size = 4
		Float PortArmsPlayerInterval; //offset = 1520, size = 4
		Float PortArmsNPCInterval; //offset = 1524, size = 4
		Float PortArmsWedgeHeight; //offset = 1528, size = 4
		Float PortArmsWedgeRadius; //offset = 1532, size = 4
		CoverLink* CurrentLink; //offset = 1536, size = 4
		Int CurrentSlotIdx; //offset = 1540, size = 4
		Int TargetSlotIdx; //offset = 1544, size = 4
		Int PreviousSlotIdx; //offset = 1548, size = 4
		Int LeftSlotIdx; //offset = 1552, size = 4
		Int RightSlotIdx; //offset = 1556, size = 4
		Float CurrentSlotPct; //offset = 1560, size = 4
		Float LastCoverActionTime; //offset = 1564, size = 4
		Int AnimationTransitionCount; //offset = 1568, size = 4
		Int AnimationTransitionPending; //offset = 1572, size = 4
		Rotator m_rLastGoodRotation; //offset = 1576, size = 12
		Vector m_vLastGoodLocation; //offset = 1588, size = 12
		Vector m_vLastGoodNormal; //offset = 1600, size = 12
		Vector m_vBumpLastPosition; //offset = 1612, size = 12
		Float m_fBumpCheckTimer; //offset = 1624, size = 4
		Vector m_vFinalRigidBodyPosition; //offset = 1628, size = 12
		Float m_fRBSleepEnergyThreshold; //offset = 1640, size = 4
		Float m_fEnableCCDMultiplierThreshold; //offset = 1644, size = 4
		LightEnvironmentComponent* m_pLightEnvComponent; //offset = 1648, size = 4
		LightEnvironmentComponent* LightEnvironment; //offset = 1652, size = 4
		Int m_nTickCount; //offset = 1656, size = 4
		Float m_fMaxRelevancyDistance; //offset = 1660, size = 4
		WwiseEventPairObject* m_oWwiseRollingIdle; //offset = 1664, size = 4
		WwiseEventPairObject* m_oWwiseRollingStartMoving; //offset = 1668, size = 4
		FaceFXAnimSet* m_pOverrideSndSetFaceFXPkg; //offset = 1672, size = 4
		AudioComponent* m_pFacialAudioComp; //offset = 1676, size = 4
		AnimTree* m_pOriginalAnimTree; //offset = 1680, size = 4
		Array<AnimSet*> m_aOriginalAnimSets; //offset = 1684, size = 12
		Array<Name> m_afnCinematicLevels; //offset = 1696, size = 12
		Int m_nWrinkleHighestLOD; //offset = 1708, size = 4
		String m_sWrinkleMaterialIdentifier; //offset = 1712, size = 12
		Int m_nHiddenRequestCount; //offset = 1724, size = 4
		Array<Object*> m_aAdditionalResourcesToCook; //offset = 1728, size = 12
		Float m_fLastFootStepTime; //offset = 1740, size = 4
		WwiseEvent* DefaultFootStepEvent; //offset = 1744, size = 4
		Float m_fPhysicsForceIncurred; //offset = 1748, size = 4
		SFXPowerManager* PowerManager; //offset = 1752, size = 4
		Float ThreatRadiusSquared; //offset = 1756, size = 4
		Array<Name> PhysicsImpactBoneList; //offset = 1760, size = 12
		Array<Name> PhysicsImpactSpringList; //offset = 1772, size = 12
		Float fPhysicsHitReactionImpulseScale; //offset = 1784, size = 4
		Float fPhysicsImpactBlendOutTime; //offset = 1788, size = 4
		Float fPhysicsImpactBlendTimeRemaining; //offset = 1792, size = 4
		Float fPhysicsImpactMassEffectScale; //offset = 1796, size = 4
		Float fPhysHRMotorSpringStrength; //offset = 1800, size = 4
		Float fPhysHRMotorDampingStrength; //offset = 1804, size = 4
		Float fPhysHRLinearSpringStrength; //offset = 1808, size = 4
		Float fPhysHRAngularSPringStrength; //offset = 1812, size = 4
		Float fPlayerPawnPhysHRModifier; //offset = 1816, size = 4
		Float fPlayerPawnPhysHRWeight; //offset = 1820, size = 4
		FaceFXAnimSet* AIBarkAnimSet; //offset = 1824, size = 4
		String AIBarkAnimName; //offset = 1828, size = 12
		Float TimeOfDeath; //offset = 1840, size = 4
		Int MaxBodyCount; //offset = 1844, size = 4
		Object* LastPhysicsSetter; //offset = 1848, size = 4
		Float FallingStateEntranceTime; //offset = 1852, size = 4
		Int m_nMaxTargetTickets; //offset = 1856, size = 4
		Int m_nMaxAttackTickets; //offset = 1860, size = 4
		Float m_fTicketExpiryTime; //offset = 1864, size = 4
		Int m_nTargetTickets; //offset = 1868, size = 4
		Int m_nAttackTickets; //offset = 1872, size = 4
		Array<AttackReservation> m_aReservations; //offset = 1876, size = 12
		Int m_nCurrentReservationID; //offset = 1888, size = 4
		Int ConformTraceInterval; //offset = 1892, size = 4
		Int ConformTraceFrameCount; //offset = 1896, size = 4
		Float InterpZTranslation; //offset = 1900, size = 4
		Vector LastMantleLocation; //offset = 1904, size = 12
		Float LastMantleTime; //offset = 1916, size = 4
		Array<RigidBodyCallback> m_CollisionCallbacks; //offset = 1920, size = 12
		Vector MeshTranslationOffset; //offset = 1932, size = 12
		Float MeshFloorConformTranslation; //offset = 1944, size = 4
		Float MeshFloorConformTransSpeed; //offset = 1948, size = 4
		Float m_fInitialZVal; //offset = 1952, size = 4
		Actor* m_aLastCollidedActor; //offset = 1956, size = 4
		Array<AimAssistBox> AimAssistRegions; //offset = 1960, size = 12
		Float ScaleLimitTimeToGo; //offset = 1972, size = 4
		Float RadarRange; //offset = 1976, size = 4
		Float RadarFOV; //offset = 1980, size = 4
		__RBCollisionCallback__Delegate __RBCollisionCallback__Delegate; //offset = 1984, size = 12

		Bool CanBeBioticCharged();
		void OnSquadMemberAdded( Pawn* Pawn, SFXPower* Power, BioPowerScript* PowerScript );
		void OnPowersLoaded();
		void ManageRagdolls( Float OldestTimeOfDeath, BioPawn* P, BioPawn* OldestDeadPawn, Int NumDeadPawns );
		Bool StopVocalization(, WwiseAudioComponent* CurrentVO );
		void SetRTPCHelmetIsEnabled( WwiseAudioComponent* WwiseComponent );
		void SFXDoComponentAction( ActorComponent* pComponent );
		Texture2D* GetGUIIcon( Bool bGetDeadIcon );
		Bool FindBumpAdjust( Vector vHitNormal, Actor* oHitActor );
		WwiseAudioComponent* GetCurrentVOAudio();
		void CollectorPossess();
		void GenerateRegenVocalization();
		void TossWeapon( Weapon* Weap, Vector ForceVelocity, Vector POVLoc, Vector TossVel, Rotator POVRot, Vector X, Vector Y, Vector Z );
		void RigidBodyCollision( PrimitiveComponent* HitComponent, PrimitiveComponent* OtherComponent, CollisionImpactData RigidCollisionData, Int ContactIndex, Int idx, RBCallback RBCallback, Float fContactMag );
		void ClearRBCallbacks();
		void RegisterRBCallback( RBCallback RBCallback, Bool bDisablePhysicsDamage, Int nPriority, Int nInsertIndex );
		PathGoalEvaluator* CreatePathGoalEvaluator( Class* GoalEvalClass );
		PathConstraint* CreatePathConstraint( Class* ConstraintClass );
		void SetTicketDuration( Int nID, Float fDuration );
		Bool HasValidAttackTicket( Int nID );
		void ReleaseAttackTicket( Int nID, Bool bKillTicket );
		Int AcquireAttackTicket( Int nCost );
		Int GetMaxTargetTickets(, Int Tickets );
		Int GetMaxAttackTickets(, Int Tickets );
		void PlayFireCharging();
		void ReleaseTargetTicket( Int nCost );
		Bool AcquireTargetTicket( Int nCost );
		Float GetTimeSinceLastRender();
		void CopyPawnAppearance( BioPawn* pSrcPawn );
		void RemoveTalentPoints( Int nPoints );
		void AddTalentPoints( Int nPoints );
		Bool EnsurePhysics( Byte NewMode );
		void OutputState();
		void SetRigidBodyMode( Byte NewMode );
		void PlayFOVO( WwiseEvent* Sound );
		BioVisualEffect* CreateDeathEffect( BioVFXTemplate* vfxTemplate, Bool bIsCrustEffect, Bool bIsTargetDeletedOnDeathEffectCompletion );
		void BreakStealth( SFXModule_GameEffectManager* Manager );
		Bool IsWithinWeaponRange( Actor* TargetActor, Byte RangeType, Float fWeaponRange );
		Float GetWeaponRange( Byte RangeType, SFXWeapon* oWeapon );
		void ForceGroundConform();
		Float CalculateDesiredGroundConformHeight( Vector vNewLocation );
		void GetAdjustedMoveDirection( Vector Dest, Actor* MoveTarget, Vector Direction );
		void OnDoneBlendingPhysicsReaction();
		Bool StartPhysicsBodyImpact( Name nmHitBoneName, Class* SFXDamageType, Bool bFoundBone, Int nBone );
		void DoPhysicsBodyImpact( Vector HitLocation, Vector Momentum, Class* DamageType, TraceHitInfo HitInfo, Vector vImpulse, Bool bAlreadyHit, Float fTotalMass, Float fImpulseScale );
		Bool TryStagger( Vector vDirection, Controller* InstigatedBy, Bool bTest, SFXAI_Core* Cont, TraceHitInfo HitInfo, Byte Action );
		Bool PlayAnimatedReaction( Byte CustomAction, Controller* InstigatedBy, Bool bPlayImpact, Vector HitLocation, Vector HitNormal, TraceHitInfo HitInfo, Bool bDeathReaction, SFXAI_Core* AI, SFXCustomAction_DamageReaction* Action, BioCustomAction* CurrentAction );
		Bool CanPlayAnimatedReaction( Float Damage, Controller* InstigatedBy, Vector HitLocation, Class* DamageType, Vector Momentum, TraceHitInfo HitInfo, HitReaction out_Reaction );
		void PlayHit( Float Damage, Controller* InstigatedBy, Vector HitLocation, Class* DamageType, Vector Momentum, TraceHitInfo HitInfo, SFXModule_Damage* DmgModule, SFXWeapon* oWeapon, Class* DamageClass, Float HealthPct, HitReaction Reaction, Float fDamageVocProbMod );
		void PlayShieldHit( Float Damage, Controller* InstigatedBy, Vector HitLocation, Class* DamageType, Vector Momentum, TraceHitInfo HitInfo, Class* DamageClass, HitReaction Reaction );
		Bool AddRagdollImpulse( Vector Impulse, Controller* InstigatedBy, Vector HitLocation, Bool bIgnorePhysicsThreshold, Name HitBone, Bool bVelChange );
		Bool CanHavePhysicsImpulse();
		Bool IsReturningToPlaypen(, SFXAI_Core* oAI );
		void SetCrouchStateInstantly( Bool bDoCrouch );
		Bool CanMantleBetween( NavigationPoint* first, NavigationPoint* Second, ReachSpec* CurrentPath );
		Bool SpecialMoveTo_ClimbUp( NavigationPoint* Start, NavigationPoint* End, SFXAI_Core* Control );
		Bool SpecialMoveTo_Mantle( NavigationPoint* Start, NavigationPoint* End, SFXAI_Core* Control );
		Bool SpecialMoveTo( NavigationPoint* Start, NavigationPoint* End, Actor* Next, SFXAI_Core* AICont, Bool CustomActionSuccess, CoverSlotMarker* oStartMarker, CoverSlotMarker* oEndMarker, MantleMarker* oMantleMarker, BioPawn* oPawn );
		Bool ControllerCanDoSpecialMove(, SFXAI_Core* AICont );
		Bool ControllerContainsClimbUpCustomAction();
		Bool ControllerContainsMantleCustomAction();
		Bool ControllerContainsCustomActionClass( Class* CustomActionClass, BioPlayerController* PlayerCont, SFXAI_Core* AICont, Class* CurrentAction );
		void TerminateCurrentCustomAction();
		Bool GetCurrentCustomAction( BioCustomAction* pAction );
		void AnimNotify( AnimNodeSequence* SeqNode, BioAnimNotify_CustomAction* NotifyObject, BioCustomAction* pAction );
		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime, BioCustomAction* pAction );
		void SetBodyStanceAnimLooping( BodyStance Stance, Bool bNewLooping, AnimNodeSequence* SeqNode );
		void SetBodyStanceAnimEndNotification( BodyStance Stance, Bool bNewStatus );
		void SetBodyStanceRootBoneAxisOption( BodyStance Stance, Byte AxisX, Byte AxisY, Byte AxisZ );
		void ScaleBodyStancePlayRate( BodyStance Stance, Float RateScale, AnimNodeSequence* SeqNode );
		void BS_UnpauseAnim( BodyStance Stance, AnimNodeSequence* SeqNode );
		void BS_PauseAnim( BodyStance Stance, AnimNodeSequence* SeqNode );
		void BS_AccelerateBlend( BodyStance Stance, Float BlendAmount );
		void BS_SetPlayRate( BodyStance Stance, Float NewRate, AnimNodeSequence* SeqNode );
		Float BS_GetPlayRate( BodyStance Stance, AnimNodeSequence* SeqNode );
		Float BS_GetTimeLeft( BodyStance Stance, AnimNodeSequence* SeqNode );
		void BS_SetPosition( BodyStance Stance, Float Position, AnimNodeSequence* SeqNode );
		void SetBodyStance( BodyStance Stance );
		void StopAllBodyStances( Float BlendOutTime, Int I );
		void StopBodyStance( BodyStance Stance, Float BlendOutTime );
		Bool IsPlayingBodyStance( BodyStance Stance );
		void PlayBodyStanceByDuration( BodyStance Stance, Float Duration, Float BlendInTime, Float BlendOutTime, Bool bLooping, Bool bOverride );
		Float PlayBodyStance( BodyStance Stance, Float Rate, Float BlendInTime, Float BlendOutTime, Bool bLooping, Bool bOverride, Bool bKeepRBASettings, Float StartTime, Float Duration, Bool bAnimPlayFail );
		Float PawnPlayCustomAnim( AnimNodeSlot* Slot, Name AnimName, Float Rate, Float BlendInTime, Float BlendOutTime, Bool bLooping, Bool bOverride, Float StartTime );
		void OnAnimEnd( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime, Int I );
		void ClearAnimNodes();
		void RecacheAnimNodes();
		void CacheAnimNodes( AnimNodeSlot* SlotNode );
		void OnOrbitalGame( BioSeqAct_OrbitalGame* Action );
		void InitializeSpeeds();
		void NotifyLimbDetached( Byte ePartGroup, Int idx, BioSeqEvt_NotifyLimbDetached* detachEvent );
		void OnPowerOrdered( Name nmPower, Actor* oTargetActor, Int idx, SFXSeqEvt_OrderedPower* oOrderEvent );
		void OnPowerCast( SFXPower* Power, Int idx, SFXSeqEvt_CastPower* oCastEvent );
		void OnPowerEffectDurationComplete( Name nmPower, Int idx, BioSeqEvt_PowerEffectDurationComplete* pedEvent, SFXAI_Core* SFXAI );
		void OnPowerCooldownFinished( Name nmPower, Int idx, BioSeqEvt_PowerCooldownFinished* pcdEvent );
		Class* GetSaveObjectClass();
		Bool IsCombatActionState( Byte eActionStateVar );
		void MakeVulnerable();
		void SpawnDefaultController( Class* AIControllerClass );
		Bool Resurrect( Float PercentOfHealthRegained, Bool bIsInstantaneous, SFXModule_Damage* DmgMod );
		Float GetRegenRate(, SFXModule_GameEffectManager* GEModule );
		Bool GetInBleedout();
		void RecoverFromBleedout();
		Bool IsArmorFortified(, SFXArmor_Base* Armor );
		Float GetShieldRechargeTime(, SFXShield_Base* ShieldObj );
		Float GetShieldRegenDelay(, SFXShield_Base* ShieldObj );
		Float GetShieldPct();
		Float GetMaxShields(, SFXShield_Base* ShieldObj, Float MaxShields );
		Float GetCurrentShields(, SFXShield_Base* ShieldObj, Float Shields );
		Float GetHealthPct(, SFXModule_Damage* DmgMod );
		Float GetMaxHealth(, SFXModule_Damage* DmgModule );
		Float GetCurrentHealth(, SFXModule_Damage* DmgModule );
		SFXShield_Base* GetShields(, SFXShield_Base* Shield );
		Bool IsShieldBoosted(, SFXShield_Base* Shield );
		void KillAttachedVFX();
		void FadeLifeCrust();
		Int GetXLASTClassContextID(, Int nValue );
		void SetRichPresence( OnlineSubsystem* OnlineSub, Array<LocalizedStringSetting> aContexts, LocalizedStringSetting Context, Array<SettingsProperty> aProperties, SettingsProperty Property, BioPlayerController* PC, LocalPlayer* LocPlayer, Int nPresenceMode, Int nIndex );
		Bool HasDeathPower(, Int Index, SFXPower* Power );
		Bool CanPlayDeathEffect( SFXGameEffect* GE );
		void PlayDeathEffect( Class* SFXDamageType, BioVFXTemplate* DeathEffect, BioVisualEffect* VFXInstance, SFXGameEffect* Effect, SFXModule_GameEffectManager* GEM, SFXGameEffect_DeathEffect* DeathGE, Bool bGameEffectDeath, Int HighestGEPriority, WwiseEvent* DeathGESound );
		void PlayDying( Class* DamageType, Vector HitLoc, Class* SFXDamageType );
		void PlayDeathVocalization( BioPawn* Killer, BioPawnType* ThePawnType );
		void ResetSnapshotNode( BioAnimNodeFrame* SnapshotNode );
		Bool Died( Controller* Killer, Class* DamageType, Vector HitLocation, SFXModule_Damage* DmgModule, Class* SFXDamageType, SFXAI_Core* AI, Bool bPermanentDeath, SFXPower* Power, BioPowerScript* PowerScript );
		SFXGameEffect* GetGameEffect( Name GEName, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
		Bool HasGameEffect( Name GEName, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
		void OnDeathAnimationFinished();
		void gibbedBy( Actor* Other );
		void ReleasePowersCamera( BioPlayerController* oCont );
		void OnTeleport( SeqAct_Teleport* Action, Array<Object*> objVars, Int idx, Actor* destActor, BioPlayerController* oPlayerController, BioWorldInfo* oBioWorldInfo );
		ParticleSystem* GetSpecificFootStepEffect( SFXPhysicalMaterialFootSteps* FootStepMat, Int FootDown );
		ParticleSystem* GetFootStepEffect( PhysicalMaterial* PhysMat, Int FootDown );
		void PlayStepEffect( Int FootDown, TraceHitInfo HitInfo, Float Loudness, ParticleSystem* FootStep, PhysicalMaterial* ParentPhysMaterial, SFXObjectPool* Pool, ParticleSystemComponent* FootStepPSC, Vector BoneLocation );
		WwiseEvent* GetSpecificFootStepSound( SFXPhysicalMaterialFootSteps* FootStepSounds, Int FootDown, WwiseEvent* retSound, Bool isRunning );
		WwiseEvent* GetFootStepSound( PhysicalMaterial* PhysMat, Int FootDown );
		void PlayStepSound( Int FootDown, TraceHitInfo HitInfo, WwiseEvent* FootStepEvent, PhysicalMaterial* ParentPhysMaterial );
		void PlayFootStepSound( Int FootDown, Vector HitLocation, Vector HitNormal, TraceHitInfo HitInfo, Vector TraceStart, Vector TraceEnd, Actor* TraceActor, Float Loudness, PlayerController* P, Bool bFootstepRelevant, Float MaxSpeed );
		void setHeadFaceFX();
		void SetScale( Float fScale );
		void ReleasePower();
		Byte GetFaction( Pawn* Other );
		Bool IsFriendly( Pawn* Other );
		Bool IsHostile( Pawn* Other );
		Bool DoReachedWaypointEvent( BioPathPoint* oPoint, Int I, Bool bPause );
		void FinishAnimControl( SkeletalMeshComponent* MeshComponent );
		void SetAnimPosition( Name SlotName, Int ChannelIndex, Name InAnimSeqName, Float InPosition, Bool bFireNotifies, Bool bLooping, AnimNodeSequence* SeqNode );
		void BeginAnimControl( Array<AnimSet*> InAnimSets, AnimNodeSequence* SeqNode, SkeletalMeshComponent* MeshComponent );
		void OnToggle( SeqAct_Toggle* Action, AnimNodeSequence* SeqNode );
		void ClearUnregisteredAnimsets();
		void ClearRegisteredCustomAnimsets( Name nmSetGroupName );
		void RegisterCustomAnimset( Name nmSetGroupName, AnimSet* oAnim );
		void RanInto( Actor* Other );
		void Touch( Actor* Other, PrimitiveComponent* OtherComp, Vector HitLocation, Vector HitNormal );
		void StartCrouch( Float HeightAdjust, Vector V );
		void EndCrouch( Float HeightAdjust, Vector V );
		Vector GetPlayerPawnConversationCloseupCameraHook(, Vector vPawnPos );
		Vector GetDefaultHookOffset(, Vector vPawnPos );
		Vector GetCameraHook( Name HookName, Vector V, Int BoneIdx );
		Vector CalculateOffsetHook( Vector Hook, Name Bone, Vector V );
		void NotifyRagdollRecoverAnimationComplete();
		void ForceEndRagdoll();
		void OnEnterRagdoll();
		void MoveToRagdollRecoverStartPosition();
		void PostInitAnimTree( SkeletalMeshComponent* SkelComp );
		void SetShouldCrouch( Bool bCrouch );
		void OnSetPhysics( SeqAct_SetPhysics* Action );
		void Destroyed();
		void CreateSelection( Bool bTargetable, Bool bCombatTargetable, SFXSelectionModule* SelMod );
		void PostBeginPlay();
		void ForceHelmetVisibility( Bool bHelmetVisible );
		void EnsurePawnIsUpright();
		Byte GetClassification();
		void SetClassification( Byte a_eClassification, Bool a_bAsDefault );
		void DroneStartLanding();
		void DroneFinishedTakingOff();
		Bool IsShowingHelmet();
		Bool IsShowingFacePlate();
		Bool IsShowingVisor();
		void RequestHelmetVisible( Bool B );
		void RequestFacePlateVisible( Bool B );
		void RequestVisorVisible( Bool B );
		void OverrideHeadGearVisibility( Bool B );
		Bool IsHeadGearVisiblePreferenceRelevant();
		Bool GetHeadGearVisiblePreference();
		void SetHeadGearVisiblePreference( Bool B );
		void RestoreCachedHeadGearVisibilityOverride();
		void CacheHeadGearVisibilityOverride();
		void SafeSetLocation( Vector vDest );
		Bool PlayFaceFX( String AnimGroup, String AnimSeq );
		Bool SetDefaultFaceFXAsset();
		void RequestHidden( Bool B );
		void SetLookAtTarget( Actor* oTarget, Byte a_eTransition, Int nRank );
		void SetAmbientLookAtTarget( Actor* oTarget, Int nRank );
		Bool ExploreMode( Float fDelaySeconds );
		Bool ReadyMode( Float fDelaySeconds );
		Float GetFractionOfEffectsMaterialEnabled();
		void SetFractionOfEffectsMaterialEnabled( Float FractionEnabled );
		Name GetEffectsMaterialType( SkeletalMeshComponent* Component );
		void SetEffectsMaterialType( Name EffectsMaterialType );
		void AnimNodeBlendComplete( Name sBlendName, Int nChild );
		void AnimNodePlayFinished( Name sBlendName );
		Bool CanPlayAnimNode( Name sBlendName, Int nFlags, Float fWeight );
		Bool GetAnimLengthAndPos( Name sAnimName, Float fAnimLength, Float fAnimPos );
		Bool RequestTurnInPlace( Rotator rDesDir );
		void GetRotationRate( Int nPitch, Int nYaw, Int nRoll );
		void SetDesiredRotation( Rotator rDesiredRotation, Bool bForce );
		void StopMovement( Bool bStopRotation );
		Byte GetWalkingSpeedMode();
		Bool IsWalking();
		Bool CanRagdoll();
		Bool TermRagdoll();
		Bool InitRagdoll();
		Bool IsInvisible();
		void UnapplyMaterialParameters( BioMaterialOverride* pMaterialParameters );
		void ApplyMaterialParameters( BioMaterialOverride* pMaterialParameters );
		void SetTextureParameterValue( Name ParameterName, Texture* Value );
		void SetScalarParameterValue( Name ParameterName, Float Value );
		void SetVectorParameterValue( Name ParameterName, Color Value );
		void OnCastAt( Pawn* oAttacker, SFXPower* Power, BioSeqEvt_OnCastAt* Event, Int I, BioAiController* oAIController );
		void OnAttacked( Pawn* oAttacker, Name WeaponName, BioSeqEvt_OnAttacked* Event, Int I );
		void TakeDamage( Float DamageAmount, Controller* EventInstigator, Vector HitLocation, Vector Momentum, Class* DamageType, TraceHitInfo HitInfo, Actor* DamageCauser, Int idx, SeqEvent_TakeDamage* dmgEvent, BioPlayerController* PC );
		void NotifyFallingAnimationComplete();
		Bool ShouldPlayFallingAnim();
		void Landed( Vector HitNormal, Actor* FloorActor, Controller* OldLastHitBy );
		void StartFall();
		void Falling();
		void UpdateRagdollState( Float DeltaTime );
		void Tick( Float DeltaTime, Bool bWeaponFiring );
		Bool IsWeaponFiring();
		Bool CanFireWeapon();
		Bool CanSwitchWeapons();
		Bool CanReload();
		Bool IsPerformingBlockingAction();
		Bool IsPerformingCustomAction();
		Bool IsSwitchingWeapons( Bool bBlendOut );
		Bool IsReloading( Bool bCheckReloadRequest, Bool bBlendOut );
		Bool IsUsingPower();
		void StartFirstUsePowerDelay( SFXGame* GameInfo );
		void ScaleShields( Float CurrentHealth, SFXShield_Base* ChkShield, Float BonusShields );
		void ScaleWeapons( SFXLoadoutData* ChkLoadout, Int ScaleLevel, SFXWeapon* ChkWeapon, Int WeaponLevel );
		void CreateWeapons( SFXLoadoutData* ChkLoadout, Class* WeaponClass );
		Bool CreateWeapon( Class* WeaponClass, Bool bEquipWeapon, SFXPlayerSquadLoadoutData* PlayerLoadout, Int GroupIdx, Int EntryIdx );
		Bool ReplaceWeapon( Byte WeaponCategory, Class* NewWeapon, Bool bEquipWeapon, SFXInventoryManager* oInventory, Int GroupIdx, Int EntryIdx, SFXWeapon* W, SFXWeapon* ReplacementWeapon, Int WeaponCount );
		void OnGiveInventory( SeqAct_GiveInventory* inAction, SFXLoadoutData* ChkLoadout, SFXShield_Base* ChkShield, ShieldLoadout ShieldLoadout );
		Int GetScaledLevel(, Int PlayerLevel, BioPlayerController* oController, BioWorldInfo* oWorldInfo, SFXEngine* oEngine );
		void ScaleEquipment( Int PlayerLevel, SFXLoadoutData* oLoadout, SFXLoadoutData* ChkLoadout, Float MaxEnemyLevel, Float ScaleLevel, Int ArmorLevel, Int HealthLevel, SFXArmor_Base* ChkArmor, SFXModule_Damage* DmgModule, SFXPower* Power );
		void GenerateInventoryFromLoadout( SFXLoadoutData* oLoadout, SFXShield_Base* Shields, Class* PowerClass, ShieldLoadout ShieldLoadout );
		void AddDefaultInventory( SFXLoadoutData* ChkLoadout );
		SFXLoadoutData* GetPawnLoadout(, SFXLoadoutData* oLoadout );
		Bool IsInBleedOut();
		Bool SetWeaponImmediately( Class* cWeapon, SFXWeapon* Wpn, SFXWeapon* WpnForSwitch );
		Name GetRightHandSocketName();
		void SetWeaponFromSlot( Byte eSlot );
		Byte GetCurrentWeaponCharacterSlot();
		void CollapseWeapon( SFXWeapon* Wpn );
		void ExpandWeapon( SFXWeapon* Wpn );
		void FadeOutPowerRelease( BioActivePower* Power );
		void FadeOutHolsterAnim( SFXWeapon* ChkWeapon );
		void SwapHolsterAnim( SFXWeapon* ChkWeapon );
		void FadeOutReloadAnim( SFXWeapon* ChkWeapon );
		void FadeOutDrawAnim( SFXWeapon* ChkWeapon );
		void SwapDrawAnim( SFXWeapon* NewWeapon );
		void RmvAnimSet( AnimSet* Set, Int AnimSetIndex );
		void AddAnimSet( AnimSet* Set );
		void AddWeaponAnimSets( SFXWeapon* NewWeapon, SFXWeapon* OldWeapon, Bool bDrawOnly, Bio_Appr_Character_Body* BodyApp, AnimSet* Set );
		Vector GetWeaponStartTraceLocation( Weapon* CurrentWeapon, SFXWeapon* SW, Vector POVLoc, Rotator POVRot, Vector AimDir, Vector ProjectedForward );
		Vector GetWeaponIdlePosition(, SFXWeapon* SFXWeapon );
		Vector GetPulledInMuzzleLocation( SFXWeapon* SW, Vector AimDir, Float MuzzleDist, Vector MuzzleLoc, Vector PulledInMuzzleLoc, Vector ExtraPullIn, Vector HitLocation, Vector HitNormal, Actor* HitActor );
		Bool GetWeaponHandPosition( Vector HandLoc, Rotator HandRot );
		Vector GetPhysicalFireStartLoc( Vector FireOffset, Vector SocketLoc, Vector X, Vector Y, Vector Z, Rotator SocketRot );
		Bool IsPendingFire( Byte InFiringMode );
		Vector GetPawnViewLocation();
		void RootMotionModeChanged( SkeletalMeshComponent* SkelComp );
		void RootMotionRelease( AnimNode* Node );
		void RootMotionOverride( AnimNode* Node, Byte RMMode, Byte RMRMode );
		Bool IsAtRightEdgeSlot( Float InLimit, Bool bMustLean );
		Bool IsAtLeftEdgeSlot( Float InLimit, Bool bMustLean );
		Bool IsOnACoverSlot();
		void ReachedCoverSlot( Int SlotIdx, BioPlayerController* PC, BioAiController* AI, Int OldSlotIdx );
		Int GetSlotIdxByPct();
		void SetCoverDirection( Byte NewCoverDirection );
		Bool IsPoppingUp( Byte Action );
		Bool IsPeeking( Byte Action );
		Bool IsLeaning( Byte Action );
		void SetCoverAction( Byte NewCoverAction );
		void SetCoverType( Byte NewCoverType );
		void LeaveCover( BioPlayerController* ControllerPlayer, BioAiController* ControllerAI );
		Byte GetCoverTypeFor( CovPosInfo Cover, Byte LeftType, Byte RightType );
		Byte FindCoverType(, Byte LeftType, Byte RightType );
		void SetCoverInfo( CoverLink* Link, Int SlotIdx, Int LeftIdx, Int RightIdx, Float SlotPct );
		void SetCovPosInfo( CovPosInfo CovInfo );
		void PlayerCoverAcquired( CovPosInfo CovInfo, BioPlayerController* PC );
		Bool CanCombat();
		Bool CanExplore();
		Bool InCombat(, BioAiController* AI, SFXGame* GameInfo );
		void PerformStepsSmoothing( Vector OldLocation, Float DeltaSeconds );
		void UpdateFloorConform( Float DeltaSeconds );
		void SetMeshTranslationOffset( Vector NewOffset, Bool bForce );
		Bool CanUseAnchor( NavigationPoint* Nav );
		Bool FitCollision();
		void CalculateCoverLocationDelta( Vector Delta );
		Bool DoesCoverStateAllowImmediateFire();
		Bool CanDoCoverAction( Byte CovAction, Bool bPrecise, Bool bTestCamera );
		Bool IsInCoverLeaning();
		Bool IsInCover();
		void SetAnimatedTransitionPending();
		Bool IsAnimatedTransitionPending();
		void EndAnimatedTransition();
		void BeginAnimatedTransition();
		Bool IsInAnimatedTransition();
		void HACKResetRootMotion();
		void HardResetActionAndAnimationState();
		Bool GetAimNodeLocation( Byte AimNode, Vector AimLocation, Bool bLogError );
		void UpdateAppearance();
		void ClearMaterialInstances();
		void RefreshMaterialInstances();
		SFXCompositeSkeletalMesh* MergeMeshes( SkeletalMesh* BaseMesh, Array<SkeletalMesh*> AdditionalMeshes, SkeletalMeshComponent* HeadMeshComponent );
		void UnWeldPhysicsAssetInstance();
		void WeldPhysicsAssetInstance();
		void ValidateRagdoll();
		void RBCollisionCallback( Pawn* oPawn, Actor* oImpactActor, Vector vImpactDir );
	};

	class BioScout: public Scout
	{
		DECLARE_PACKAGE_CLASS( BioScout, Scout, SFXGame )

	public:

		Bool m_bAggressivePathPruning: 1; //offset = 1096, size = 4
	};

	class SFXCompositeSkeletalMesh: public SkeletalMesh
	{
		DECLARE_PACKAGE_CLASS( SFXCompositeSkeletalMesh, SkeletalMesh, SFXGame )

	public:

		Array<String> SourceMeshNames; //offset = 596, size = 12
		Array<BoneOverrideInfo> OverrideInfo; //offset = 608, size = 12

		Bool MatchesMerge( SkeletalMesh* BaseMesh, Array<SkeletalMesh*> AdditionalMeshes, SkeletalMeshComponent* HeadMeshComponent );
	};

	class BioCapability: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCapability, Object, SFXGame )

	public:

		Pawn* m_oMember; //offset = 60, size = 4
		Byte m_nCapType; //offset = 64, size = 1
		Byte m_nCapMode; //offset = 65, size = 1
		Name m_nmTechnique; //offset = 68, size = 8
		Int m_nSubTechnique; //offset = 76, size = 4
		Float m_fRating; //offset = 80, size = 4
		Float m_fMinRange; //offset = 84, size = 4
		Float m_fMaxRange; //offset = 88, size = 4
		Float m_fBestRange; //offset = 92, size = 4
		Float m_fTmpRange; //offset = 96, size = 4
		Bool m_bCanCasterMoveDuring: 1; //offset = 100, size = 4
	};

	class BioCombatLog: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCombatLog, Object, SFXGame )

	public:
	};

	class BioAFComponent: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAFComponent, Object, SFXGame )

	public:

		Actor* Owner; //offset = 60, size = 4
		Actor* Instigator; //offset = 64, size = 4
	};

	enum EInitalizeEventType
	{
		EIET_None,
		EIET_Attacked,
	};

	class BioActive: public BioAFComponent
	{
		DECLARE_PACKAGE_CLASS( BioActive, BioAFComponent, SFXGame )

	public:

		Byte m_InitalizationEventType; //offset = 68, size = 1
		Bool m_bBeingShutdown: 1; //offset = 72, size = 4
		Bool m_bUpdateOnShutdown: 1; //offset = 72, size = 4

		Bool StartActiveFromScript();
		Bool EndActive();
		Bool ValidSuperMode( Byte eMode );
		Name GetEventTypeName();
		void Initialize( Actor* oOwner );
		void InitializeInternal();
	};

	enum EBioPowerState
	{
		BIO_POWER_DONE,
		BIO_POWER_CASTING,
		BIO_POWER_RELEASE,
	};

	class BioActivePower: public BioActive
	{
		DECLARE_PACKAGE_CLASS( BioActivePower, BioActive, SFXGame )

	public:

		BioPower* m_oPower; //offset = 76, size = 4
		Pawn* m_oCaster; //offset = 80, size = 4
		BioPawn* m_oCasterAsBioPawn; //offset = 84, size = 4
		BioEpicPawnBehavior* m_oCasterBehavior; //offset = 88, size = 4
		BioPlayerController* m_oCasterAsPlayerController; //offset = 92, size = 4
		Bool m_bCasterIsHenchman: 1; //offset = 96, size = 4
		Bool m_bSkipPowerCooldown: 1; //offset = 96, size = 4
		Bool m_bManualIgnoreCooldown: 1; //offset = 96, size = 4
		Bool m_bUsePowerReservation: 1; //offset = 96, size = 4
		Bool m_bInstantPowerUse: 1; //offset = 96, size = 4
		Bool m_bPlayAnimations: 1; //offset = 96, size = 4
		Bool m_bAnimationReadyForPowerRelease: 1; //offset = 96, size = 4
		Bool m_bReleaseAnimEnded: 1; //offset = 96, size = 4
		Bool m_bWaitingForAnimationToStart: 1; //offset = 96, size = 4
		Bool m_bShowPowerAiming: 1; //offset = 96, size = 4
		Bool m_bEnablePowerCooldown: 1; //offset = 96, size = 4
		Bool m_bShowPowerImpactText: 1; //offset = 96, size = 4
		Bool m_bDisplayingCastingBeam: 1; //offset = 96, size = 4
		Bool m_bPlayerOrderedPowerUse: 1; //offset = 96, size = 4
		Bool m_bIgnoreSuppression: 1; //offset = 96, size = 4
		Int m_nReservationID; //offset = 100, size = 4
		Vector m_vOriginalCameraLocation; //offset = 104, size = 12
		Rotator m_rOriginalCameraRotation; //offset = 116, size = 12
		Byte m_ePowerState; //offset = 128, size = 1
		Byte m_ePreviousCoverAction; //offset = 129, size = 1
		Float m_fPowerStateElapsed; //offset = 132, size = 4
		Float m_fMaxWaitTimeForAnimation; //offset = 136, size = 4
		Float m_fCurrentWaitTimeForAnimation; //offset = 140, size = 4
		Float m_fCastingBeamTime; //offset = 144, size = 4
		AnimSet* m_oAnimSet; //offset = 148, size = 4
		Int m_nTag; //offset = 152, size = 4
		Actor* m_oTargetToAimAt; //offset = 156, size = 4
		Vector m_vLocationToAimAt; //offset = 160, size = 12

		void ClearPreviousCoverAction();
		void OnCastAt( Actor* Target, Actor* Caster, BioPower* Power );
		void ReleasedOnActor( Int idx, BioSeqEvt_AffectedByPower* powerEvent );
		void TriggerPowerVocalization();
		Projectile* SpawnProjectile(, SFXProjectile_Power* Projectile, Vector ProjectileLocation, Rotator ProjectileRotation, Vector HitLocation, Vector HitNormal, Actor* HitActor, BioWorldInfo* WorldInfo, SFXAI_Core* AIController );
		Bool AimProjectilePower(, Vector HitLocation, Vector HitNormal, Actor* HitActor, BioWorldInfo* WorldInfo, Vector StartLocation );
		void OnAnimReleaseEnd();
		void OnAnimReleaseBegin();
		void OnAnimCastingEnd();
		void OnAnimCastingBegin();
		void UpdatePowerOrder( Bool bOrderedByPlayer, Bool bIgnoreSuppression );
		void SetTargetLocation( Vector vLocation );
		void SetTargetActor( Actor* oTarget );
		Bool CancelPower( Bool bOnlyCancelIfCasting );
		void AnimationReadyForPowerRelease();
	};

	class BioActiveUseArtPlaceable: public BioActive
	{
		DECLARE_PACKAGE_CLASS( BioActiveUseArtPlaceable, BioActive, SFXGame )

	public:

		BioReactiveUseArtPlaceable* Reactive; //offset = 76, size = 4
		Float m_fDelay; //offset = 80, size = 4
		Bool m_bDone: 1; //offset = 84, size = 4

		Bool DisplayProgress();
		Float GetProgress();
		Bool ValidSuperMode( Byte eMode );
		void InitializeInternal();
	};

	class BioReactive: public BioAFComponent
	{
		DECLARE_PACKAGE_CLASS( BioReactive, BioAFComponent, SFXGame )

	public:

		Bool m_bActivated: 1; //offset = 68, size = 4
		Bool m_bDataInitialized: 1; //offset = 68, size = 4

		void Initialize( Actor* oOwner, Actor* oInstigator );
		void InitializeInternal();
	};

	class BioReactiveUseArtPlaceable: public BioReactive
	{
		DECLARE_PACKAGE_CLASS( BioReactiveUseArtPlaceable, BioReactive, SFXGame )

	public:

		Float m_fCostToUse; //offset = 72, size = 4
		Float m_fFullSkillTime; //offset = 76, size = 4
		Float m_fSkillTimeDone; //offset = 80, size = 4
		Name m_nmSkillToGoto; //offset = 84, size = 8
		Bool m_bTransitionIntialized: 1; //offset = 92, size = 4
		Bool bDone: 1; //offset = 92, size = 4
		BioActiveUseArtPlaceable* Active; //offset = 96, size = 4
		Float fCount; //offset = 100, size = 4

		void InitializeInternal();
	};

	enum EBioReticle
	{
		RETICLE_COMBAT,
		RETICLE_BIOTIC,
		RETICLE_TECH,
	};

	enum EBioRangeInfoStatus
	{
		BIO_RANGE_INFO_STATUS_INVALID,
		BIO_RANGE_INFO_STATUS_INTERPOLATE,
	};

	enum EBioSophistication2DAColumnName
	{
		BIO_SOPHISTICATION_2DA_COLUMN_NAME_TBASE,
		BIO_SOPHISTICATION_2DA_COLUMN_NAME_CBASE,
		BIO_SOPHISTICATION_2DA_COLUMN_NAME_TMAX,
		BIO_SOPHISTICATION_2DA_COLUMN_NAME_CMAX,
		BIO_SOPHISTICATION_2DA_COLUMN_NAME_TAR,
	};

	enum EBioSuperModes
	{
		BIO_SUPERMODE_BASE,
		BIO_SUPERMODE_INVALID,
	};

	class BioSuperMode: public Object
	{
		DECLARE_PACKAGE_CLASS( BioSuperMode, Object, SFXGame )

	public:

		Actor* Owner; //offset = 60, size = 4
		Byte m_eSuperModeType; //offset = 64, size = 1
		Byte m_eReticleStatsIndex; //offset = 65, size = 1
		Byte m_eRangeInfoStatus; //offset = 66, size = 1
		Bool m_bUpdateReticle: 1; //offset = 68, size = 4
		Bool m_bIsActivated: 1; //offset = 68, size = 4
		Bool m_bTargetRequired: 1; //offset = 68, size = 4
		Bool m_bIgnoreReticleResetOnce: 1; //offset = 68, size = 4
		Name m_aSophistication2DAColumnName[7]; //offset = 72, size = 8
		Int m_nRangeRow; //offset = 128, size = 4
		Float m_fElevationThreshold; //offset = 132, size = 4
		Float m_fSuppressionTimeThreshold; //offset = 136, size = 4
	};

	const char* GAME_PROPERTY_GROUP_NONE = -1;

	enum EBioGamePropertyType
	{
		GPT_Static,
		GPT_Timed,
		GPT_Instant,
	};

	struct BioGamePropertyApplication
	{
		Object* m_pActualTarget; //offset = 0, size = 4
		BioGameEffect* m_pGE; //offset = 4, size = 4
	};

	class BioGameProperty: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGameProperty, Object, SFXGame )

	public:

		Object* m_oOwner; //offset = 60, size = 4
		Array<BioGamePropertyConditional*> m_aPropConditionals; //offset = 64, size = 12
		Array<BioGameEffect*> m_aGameEffects; //offset = 76, size = 12
		Byte m_ePropertyType; //offset = 88, size = 1
		Map_Mirror m_mapApplicationArray; //offset = 92, size = 20
		Float m_fDuration; //offset = 112, size = 4
		Bool m_bTicked: 1; //offset = 116, size = 4
		Bool m_bFireAndForget: 1; //offset = 116, size = 4
		Bool m_bApplyOnCreation: 1; //offset = 116, size = 4
		Bool m_bSendEffectDurationComplete: 1; //offset = 116, size = 4
		Float m_fTickInterval; //offset = 120, size = 4
		Int m_nGamePropertyGroup; //offset = 124, size = 4
		Float m_fPower; //offset = 128, size = 4
		BioGamePropertyEventSet* m_oGamePropertyEvents; //offset = 132, size = 4
		Name m_nmGamePropertyName; //offset = 136, size = 8
		Int m_level; //offset = 144, size = 4

		Bool HasEffect( Class* GameEffectClass );
		void Unapply( Object* pTargetObject );
		void Apply( Object* pTargetObject );
		String ToLine(, String sOutput, Array<String> asVariableValuePairs, Int I );
		String ToString( String sIndent, String sOutput );
		BioGameProperty* CreateInstant(, BioGameProperty* gp );
		BioGameProperty* CreateGameProperty( BioGamePropertyContainer* oGPContainer, Object* oOwner, Byte ePropertyType, Float fTimedDuration, Bool bTicked, Float fTickInterval, Int nGamePropertyGroup, Float fPower, Bool bFireAndForget, BioGameProperty* gp );
		void RunTests( BioPawn* oPawn );
		void ScaleToLevel( Int nPowerLevel );
		void RemoveEffects( Object* oTarget );
		void ApplyEffects( Object* oTarget, Bool bIsInstant );
		void TickEffects( Float fDeltaTime );
		Bool TestConditionals( Object* oTarget );
		void AddConditionalToProperty( BioGamePropertyConditional* oConditional );
		void AddGameEffectToProperty( BioGameEffect* oEffect );
	};

	class BioGamePropertyConditional: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditional, Object, SFXGame )

	public:

		BioGameProperty* m_oOwnerGameProperty; //offset = 60, size = 4
		Array<Byte> m_aEvent; //offset = 64, size = 12

		void Uninitialize();
		void Initialize();
	};

	class BioGamePropertyConditionalEquipmentChange: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalEquipmentChange, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalEquipmentChangeVehicle: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalEquipmentChangeVehicle, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalHasNotFired: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalHasNotFired, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalImporter: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalImporter, BioBaseComponent, SFXGame )

	public:

		BioGamePropertyConditional* LoadGamePropertyConditional( Bio2DA* o2DA, Int nConditionalId, BioGameProperty* oOwner );
	};

	class BioGamePropertyConditionalIsActorType: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsActorType, BioGamePropertyConditional, SFXGame )

	public:

		Name m_nmActorType; //offset = 76, size = 8

		void SetActorType( Name nmActorType );
	};

	class BioGamePropertyConditionalIsAlive: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsAlive, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalIsArmor: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsArmor, BioGamePropertyConditional, SFXGame )

	public:

		Byte m_eArmorType; //offset = 76, size = 1
	};

	class BioGamePropertyConditionalIsCurrentArmor: public BioGamePropertyConditionalIsArmor
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsCurrentArmor, BioGamePropertyConditionalIsArmor, SFXGame )

	public:
	};

	class BioGamePropertyConditionalIsCurrentWeapon: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsCurrentWeapon, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalIsItem: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsItem, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalIsItemEquipped: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsItemEquipped, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalIsPawn: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsPawn, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalWeapon: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalWeapon, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalIsWeapon: public BioGamePropertyConditionalWeapon
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalIsWeapon, BioGamePropertyConditionalWeapon, SFXGame )

	public:
	};

	class BioGamePropertyConditionalOnWeaponChange: public BioGamePropertyConditionalWeapon
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalOnWeaponChange, BioGamePropertyConditionalWeapon, SFXGame )

	public:
	};

	class BioGamePropertyConditionalWeaponPowerUsed: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalWeaponPowerUsed, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalXModInstalled: public BioGamePropertyConditional
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalXModInstalled, BioGamePropertyConditional, SFXGame )

	public:
	};

	class BioGamePropertyConditionalXModInstalledInCurrentWeapon: public BioGamePropertyConditionalXModInstalled
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalXModInstalledInCurrentWeapon, BioGamePropertyConditionalXModInstalled, SFXGame )

	public:
	};

	class BioGamePropertyConditionalXModInstalledInEquipment: public BioGamePropertyConditionalXModInstalled
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyConditionalXModInstalledInEquipment, BioGamePropertyConditionalXModInstalled, SFXGame )

	public:
	};

	class BioGamePropertyContainer: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyContainer, Object, SFXGame )

	public:

		Array<BioGameProperty*> m_aGameProperties; //offset = 60, size = 12
		BioGamePropertyEventDispatcher* m_oEventDispatcher; //offset = 72, size = 4

		String ToString( String sIndent, String sOutput, Int I, String sGameProperty );
		void OnGPEvent( Byte eEvent, Object* pTarget );
		void ScaleToLevel( Int nLevel, Int nIndex );
		void Tick( Float fDeltaTime );
	};

	struct BioEffectLevelIteratorPair
	{
		Int m_nGameProperty; //offset = 0, size = 4
		Array<Int> m_aGPEffectRows; //offset = 4, size = 12
	};

	class BioGamePropertyEffectLevelIterator: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyEffectLevelIterator, Object, SFXGame )

	public:

		Array<BioEffectLevelIteratorPair> m_aPairs; //offset = 60, size = 12

		void Initialize( Bio2DA* o2DA, Int nKeyColumn, Int nKey );
	};

	enum EBioGamePropertyEvent
	{
		GAMEPROP_EVENT_EQUIPMENT_CHANGE,
		GAMEPROP_EVENT_XMOD_CHANGE,
		GAMEPROP_EVENT_WEAPON_IMPACT,
		GAMEPROP_EVENT_VEHICLE_EQUIPMENT_CHANGE,
	};

	class BioGamePropertyEventSet: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyEventSet, Object, SFXGame )

	public:

		Array<Byte> m_aEvents; //offset = 60, size = 12

		BioGamePropertyEventSet* Create3( Byte eEvent1, Byte eEvent2, Byte eEvent3, Object* oSource, BioGamePropertyEventSet* oEventSet );
		BioGamePropertyEventSet* Create2( Byte eEvent1, Byte eEvent2, Object* oSource, BioGamePropertyEventSet* oEventSet );
		BioGamePropertyEventSet* Create1( Byte eEvent1, Object* oSource, BioGamePropertyEventSet* oEventSet );
		Bool CheckForAnyEvents( BioGamePropertyEventSet* oEvents );
		Bool CheckForAllEvents( BioGamePropertyEventSet* oEvents );
		Bool CheckForEvent( Byte eEvent );
		void RemoveEventSet( BioGamePropertyEventSet* oEvents );
		void RemoveEvents( Array<Byte> aEvents );
		void RemoveEvent( Byte eEvent );
		void AddEventSet( BioGamePropertyEventSet* oEvents );
		void AddEvents( Array<Byte> aEvents );
		void AddEvent( Byte eEvent );
		void Clear();
	};

	class BioGamePropertyEventDispatcher: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyEventDispatcher, Object, SFXGame )

	public:

		Map_Mirror m_mapQueued; //offset = 60, size = 20
		Map_Mirror m_mapEventRegistry; //offset = 80, size = 20

		void ProcessQueue();
		void UnregisterGameProperty( BioGameProperty* oGameProp );
		void RegisterGameProperty( BioGameProperty* oGameProp );
		void OnEvent( Byte eEvent, Object* pTarget );
		void LogDebugInfo( BioGamePropertyEventSet* pEvents, Object* pTarget );
	};

	class BioGamePropertyHolderTraits: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyHolderTraits, Object, SFXGame )

	public:

		BioGamePropertyContainer* GetGPContainer( Object* pObject, SFXGamePropertiesModule* oGameProperties );
		BioGamePropertyManager* GetGPManager( Object* oTarget, SFXGamePropertiesModule* oGameProperties );
	};

	enum EBioCharacterImporterGameProperty2DA
	{
		GAMEPROP_IMPORTER_2DA_GAMEPROPERTY_GAMEPROPERTIES,
		GAMEPROP_IMPORTER_2DA_GAMEPROPERTY_CONDITIONALS,
		GAMEPROP_IMPORTER_2DA_GAMEPROPERTY_GAMEPROPERTY_CONDITIONALS,
	};

	struct BioGPLoadData
	{
		Object* oOwner; //offset = 0, size = 4
		BioGamePropertyContainer* oContainer; //offset = 4, size = 4
		Int nGamePropId; //offset = 8, size = 4
		Bio2DA* oFXLevelTable; //offset = 12, size = 4
		Int m_nPowerLevel; //offset = 16, size = 4
		Array<Int> aEffectLevelRows; //offset = 20, size = 12
		Int m_nMaxRanks; //offset = 32, size = 4
	};

	class BioGamePropertyImporter: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyImporter, BioBaseComponent, SFXGame )

	public:

		Name m_nmGameProperty2DAPackage; //offset = 68, size = 8
		Name m_aGameProperty2DANames[5]; //offset = 76, size = 8
		Bio2DA* m_aGameProperty2DA[5]; //offset = 116, size = 4
		Bool m_bDefault2DAsLoaded: 1; //offset = 136, size = 4

		BioGameProperty* LoadGameProperty( BioGPLoadData oGPData );
	};

	const char* GP_NEVER_TIMEOUT = 9999999;

	enum EBioGPTimeAction
	{
		GP_TA_REMOVE,
		GP_TA_CONTINUE,
	};

	enum EBioGPTimingType
	{
		GP_TIMING_STATIC,
		GP_TIMING_TIMEOUT,
		GP_TIMING_TICK,
	};

	struct BioGPTimingData
	{
		Float fTime; //offset = 0, size = 4
		BioGameProperty* oGP; //offset = 4, size = 4
		Byte eTimingType; //offset = 8, size = 1
		Bool bFrameTicked: 1; //offset = 12, size = 4
	};

	class BioGamePropertyTimer: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyTimer, Object, SFXGame )

	public:

		Array<BioGPTimingData> m_aTimedGPs; //offset = 60, size = 12
		Array<BioGameProperty*> m_aFrameTickGPs; //offset = 72, size = 12
		Bool m_bMutex: 1; //offset = 84, size = 4
		__OnRemoveGameProperty__Delegate __OnRemoveGameProperty__Delegate; //offset = 88, size = 12

		String ToString( String sIndent, String sOutput, Int I, String sGameProperty );
		void InvokeDelegate( pDelegate pDelegate, BioGameProperty* pGP, Byte eTimingType, Float fDeltaTimeRemaining, Bool bBogus );
		void RemoveAllNonStatic( pDelegate pDelegate );
		Float GetTimeForGamePropertyByName( Name nmGamePropertyName, Byte eTimingType, BioGameProperty* oGameProperty );
		Float GetTimeForGameProperty( BioGameProperty* oGameProp, Byte eTimingType );
		void Tick( Float fDeltaTime, oOnRemoveGameProperty oOnRemoveGameProperty );
		void AppendStaticGameProperty( BioGameProperty* oGP );
		Int FindGamePropertyIndex( BioGameProperty* oGP, Byte eTimingType );
		void RemoveGamePropertyAtIndex( Int nIndex );
		Bool RemoveGameProperty( BioGameProperty* oGP );
		void InsertGameProperty( BioGameProperty* oGP, Float fTime, Byte eTimingType, Bool bFrameTicked );
		void OnRemoveGameProperty( BioGameProperty* pGP, Byte eTimingType, Float fDeltaTimeRemaining );
	};

	struct BioGamePropertyManagerTimedOutTicked
	{
		BioGameProperty* m_pGP; //offset = 0, size = 4
		Float m_fTimeRemaining; //offset = 4, size = 4
	};

	class BioGamePropertyManager: public SFXModule
	{
		DECLARE_PACKAGE_CLASS( BioGamePropertyManager, SFXModule, SFXGame )

	public:

		BioGamePropertyTimer* m_oRegisteredGPs; //offset = 68, size = 4
		Array<BioGameProperty*> m_apPendingUnapply; //offset = 72, size = 12
		Array<BioGamePropertyManagerTimedOutTicked> m_aTimedOutTicked; //offset = 84, size = 12
		Object* m_oOwner; //offset = 96, size = 4
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_mapActiveGamePropertyGroups; //offset = 100, size = 20

		String ToString( String sIndent, String sOutput );
		Bool IsGameEffectApplied( Class* GameEffectClass );
		Bool FindGamePropertyByEffectType( Class* GameEffectClass, Int nGamePropertyGroup, Array<BioGameProperty*> aProperties );
		Bool FindGamePropertyByGroup( Int nGamePropertyGroup, Array<BioGameProperty*> aProperties );
		Bool FindGamePropertyByOwner( Actor* oOwner, Int nGamePropertyGroup, Array<BioGameProperty*> aProperties );
		Bool FindGamePropertyByName( Name nmName, Int nGamePropertyGroup, Array<BioGameProperty*> aProperties );
		Object* GetOwnerObject();
		void Tick( Float fDelta );
		void TickInternal( Float fDelta );
		void OnGPTimeOut( BioGameProperty* pGameProperty, Byte eTimingType, Float fDeltaTimeRemaining );
		void UnapplyGameProperty( BioGameProperty* pGP, Object* pTarget );
		void ApplyGameProperty( BioGameProperty* pGP, Object* pTarget );
		void EvaluateGameProperty( BioGameProperty* pGP, Object* pTarget );
	};

	class SFXGamePropertiesModule: public SFXBaseGamePropertiesModule
	{
		DECLARE_PACKAGE_CLASS( SFXGamePropertiesModule, SFXBaseGamePropertiesModule, SFXGame )

	public:

		BioGamePropertyManager* m_oAppliedGameProperties; //offset = 68, size = 4
		BioGamePropertyContainer* m_oGameProperties; //offset = 72, size = 4
	};

	class BioInGamePropertyEditor: public Object
	{
		DECLARE_PACKAGE_CLASS( BioInGamePropertyEditor, Object, SFXGame )

	public:

		BioPropertyEditorBaseNode* m_oPropertyEditorNodes; //offset = 60, size = 4
		Bool m_bIsActive: 1; //offset = 64, size = 4
		Bool m_bDebugBones: 1; //offset = 64, size = 4
		Bool m_bSortByType: 1; //offset = 64, size = 4
		Bool m_bSortByName: 1; //offset = 64, size = 4
		Float m_fHUDRelativePropertyEditorOriginX; //offset = 68, size = 4
		Float m_fHUDRelativePropertyEditorOriginY; //offset = 72, size = 4
		Float m_fPropertyEditorSizeX; //offset = 76, size = 4
		Float m_fPropertyEditorSizeY; //offset = 80, size = 4
		Float m_fPropertyEditorRelativeColumnOneX; //offset = 84, size = 4
		Float m_fPropertyEditorRelativeColumnTwoX; //offset = 88, size = 4
		Float m_fPropertyEditorRelativeColumnThreeX; //offset = 92, size = 4
		Float m_fPropertyEditorRelativeColumnY; //offset = 96, size = 4
		Float m_fColumnHeight; //offset = 100, size = 4
		String m_sFooterText; //offset = 104, size = 12
		String m_sFileName; //offset = 116, size = 12
		String m_sEditableRootName; //offset = 128, size = 12
		String m_sCameraRootName; //offset = 140, size = 12
		String m_sAnimNodeName; //offset = 152, size = 12
		String m_sNewLoadSaveNodeName; //offset = 164, size = 12
		String m_sStateNodeName; //offset = 176, size = 12
		String m_sActionMappingName; //offset = 188, size = 12

		String filterString( String Input, String output );
		void DrawToHUD( BioHUD* oHUD, Canvas* oCanvas, Float fBorderSpacing, Int I, Int minimum, Int FootHeaderHeight, BioPropertyEditorBaseNode* oFocusedControlNode, BioPropertyEditorBaseNode* oSelectableSiblingsParent, Color Col );
		void CreateCommand( BioPropertyEditorBaseNode* Parent, String CmdName, String Command, BioPropertyEditorLevelNode* oControlNode );
		void CreateObjectNode( BioPropertyEditorBaseNode* Parent, Object* O, String ObjName, BioPropertyEditorPropertyNode* oControlNode );
		void CreateGameplayNodes( BioPropertyEditorBaseNode* Parent, SFXInventoryManager* Inv, Inventory* A );
		void DrawBones( BioHUD* oHUD );
		Bool PerformRightShoulderAction();
		Bool PerformLeftShoulderAction();
		Bool PerformRightTriggerAction();
		Bool PerformLeftTriggerAction();
		Bool ActivateMainMenu();
		Bool PerformLeftAction();
		Bool PerformRightAction();
		Bool PerformDownAction();
		Bool PerformUpAction();
		Bool PerformDeactivateAction();
		Bool PerformActivateAction();
		Bool CreateNodeTestData();
		Bool WriteTreeDataToHUD( BioHUD* oHUD );
		Bool UpdateSystem( Float fDeltaTime );
		Bool DeactivateSystem();
		Bool ActivateSystem();
		Bool Initialize();
	};

	class BioPropertyEditorBaseNode: public Object
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorBaseNode, Object, SFXGame )

	public:

		String m_sNodeDisplayName; //offset = 60, size = 12
		Array<BioPropertyEditorBaseNode*> m_aChildren; //offset = 72, size = 12
		Array<BioPropertyEditorBaseNode*> m_aTraversedStack; //offset = 84, size = 12
		Int m_nCurrentlySelectedChild; //offset = 96, size = 4
		Int m_nScrollBoxFirstIndex; //offset = 100, size = 4
		Int m_nScrollBoxSize; //offset = 104, size = 4
		BioInGamePropertyEditor* m_oTop; //offset = 108, size = 4
		BioPropertyEditorBaseNode* m_oParent; //offset = 112, size = 4
		Color m_colour; //offset = 116, size = 4
		Int m_nGeneration; //offset = 120, size = 4
		String m_sParentGenName; //offset = 124, size = 12

		BioInGamePropertyEditor* getTop();
		String getDisplayText( Bool selectable );
		Color getColour();
		void setColour( Color Col );
		void RightShoulderAction();
		void LeftShoulderAction();
		void RightTriggerAction();
		void LeftTriggerAction();
		void DecrementCurrentSelection();
		void IncrementCurrentSelection();
		BioPropertyEditorBaseNode* GetSelectablesParent();
		BioPropertyEditorBaseNode* GetSelectedChildOnStackTop();
		BioPropertyEditorBaseNode* GetSelectedChild();
		Bool SelectionAction();
	};

	class BioPropertyEditorPropertyNode: public BioPropertyEditorBaseNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorPropertyNode, BioPropertyEditorBaseNode, SFXGame )

	public:

		Pointer Base; //offset = 136, size = 4
		String m_sValueString; //offset = 140, size = 12
		String m_sDeliminator; //offset = 152, size = 12

		Bool MakeNodes( String thisOneOnly );
		void SetObject( Object* O );
		void DecrementCurrentSelection();
		void IncrementCurrentSelection();
		void RightTriggerAction();
		void LeftTriggerAction();
		String getDisplayText( Bool selectable );
		Bool SelectionAction();
	};

	class BioPropertyEditorArrayNode: public BioPropertyEditorPropertyNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorArrayNode, BioPropertyEditorPropertyNode, SFXGame )

	public:

		Property* m_Property; //offset = 164, size = 4

		Bool SelectionAction();
	};

	class BioPropertyEditorBoneNode: public BioPropertyEditorBaseNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorBoneNode, BioPropertyEditorBaseNode, SFXGame )

	public:

		SkeletalMesh* m_oSkeletalMesh; //offset = 136, size = 4
		Int m_iLodIndex; //offset = 140, size = 4
		Int m_iBoneIndex; //offset = 144, size = 4

		Bool SelectionAction();
	};

	class BioPropertyEditorEditableNode: public BioPropertyEditorPropertyNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorEditableNode, BioPropertyEditorPropertyNode, SFXGame )

	public:

		Property* prop; //offset = 164, size = 4
		Int integerVal; //offset = 168, size = 4
		Float floatVal; //offset = 172, size = 4
		Byte byteVal; //offset = 176, size = 1
		Bool boolVal: 1; //offset = 180, size = 4
		Bool alreadyEdited: 1; //offset = 180, size = 4
		Property* m_arrayProperty; //offset = 184, size = 4
		Float StepSize; //offset = 188, size = 4

		void AcceptNewValue();
		void DoChange( Float Delta );
		void RightTriggerAction();
		void LeftTriggerAction();
		void DecrementCurrentSelection();
		void IncrementCurrentSelection();
		Bool SelectionAction();
	};

	class BioPropertyEditorEditNode: public BioPropertyEditorPropertyNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorEditNode, BioPropertyEditorPropertyNode, SFXGame )

	public:

		Property* prop; //offset = 164, size = 4
		Float StepSize; //offset = 168, size = 4
		Float floatVal; //offset = 172, size = 4
		Int otherVal; //offset = 176, size = 4

		String getDisplayText( Bool selectable );
		Bool SelectionAction();
	};

	class BioPropertyEditorLevelNode: public BioPropertyEditorBaseNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorLevelNode, BioPropertyEditorBaseNode, SFXGame )

	public:

		String m_sCommand; //offset = 136, size = 12

		Bool SelectionAction();
	};

	class BioPropertyEditorLoadNode: public BioPropertyEditorBaseNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorLoadNode, BioPropertyEditorBaseNode, SFXGame )

	public:

		String Filename; //offset = 136, size = 12

		void DecrementCurrentSelection();
		void IncrementCurrentSelection();
		Bool SelectionAction();
	};

	class BioPropertyEditorReadOnlyNode: public BioPropertyEditorPropertyNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorReadOnlyNode, BioPropertyEditorPropertyNode, SFXGame )

	public:

		String sDisplay; //offset = 164, size = 12

		Bool SelectionAction();
	};

	class BioPropertyEditorSaveNode: public BioPropertyEditorBaseNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorSaveNode, BioPropertyEditorBaseNode, SFXGame )

	public:

		String Filename; //offset = 136, size = 12

		void DecrementCurrentSelection();
		void IncrementCurrentSelection();
		Bool SelectionAction();
	};

	class BioPropertyEditorVolatileNode: public BioPropertyEditorBaseNode
	{
		DECLARE_PACKAGE_CLASS( BioPropertyEditorVolatileNode, BioPropertyEditorBaseNode, SFXGame )

	public:

		Bool SelectionAction();
	};

	class BioGestChainNode: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGestChainNode, Object, SFXGame )

	public:

		BioEvtSysTrackGesture* m_pGestTrack; //offset = 60, size = 4
		Int m_nIndex; //offset = 64, size = 4
	};

	class BioGestChainTree: public BioGestChainNode
	{
		DECLARE_PACKAGE_CLASS( BioGestChainTree, BioGestChainNode, SFXGame )

	public:

		Array<BioGestChainNode*> m_aChildren; //offset = 68, size = 12
	};

	enum EBioGesturePriority
	{
		eBioGesturePriority_None,
		eBioGesturePriority_Kismet,
		eBioGesturePriority_Conversations,
	};

	struct SFXGestureData
	{
		Name nmPoseSet; //offset = 0, size = 8
		Name nmPoseAnim; //offset = 8, size = 8
		Name nmGestureSet; //offset = 16, size = 8
		Name nmGestureAnim; //offset = 24, size = 8
		Name nmTransitionSet; //offset = 32, size = 8
		Name nmTransitionAnim; //offset = 40, size = 8
		Float fPlayRate; //offset = 48, size = 4
		Float fStartOffset; //offset = 52, size = 4
		Float fEndOffset; //offset = 56, size = 4
		Bool bInvalidData: 1; //offset = 60, size = 4
		Bool bOneShotAnim: 1; //offset = 60, size = 4
		Float fStartBlendDuration; //offset = 64, size = 4
		Float fEndBlendDuration; //offset = 68, size = 4
		Float fWeight; //offset = 72, size = 4
		Bool bChainToPrevious: 1; //offset = 76, size = 4
		Bool bPlayUntilNext: 1; //offset = 76, size = 4
		Array<Int> aChainedGestures; //offset = 80, size = 12
		Bool bUseDynAnimSets: 1; //offset = 92, size = 4
		Bool bSnapToPose: 1; //offset = 92, size = 4
		Float fTransBlendTime; //offset = 96, size = 4
	};

	struct BioGestDataKey
	{
		SFXGestureData tRawData; //offset = 0, size = 100
		BioGestChainTree* pChainTree; //offset = 100, size = 4
		Bool bUseDynamicAnimSets: 1; //offset = 104, size = 4
	};

	class BioGestureAnimSetMgr: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGestureAnimSetMgr, Object, SFXGame )

	public:

		Bool m_bInGestures: 1; //offset = 60, size = 4
		Bool m_bEnteringGestures: 1; //offset = 60, size = 4
		Bool m_bAutoLeaveGestures: 1; //offset = 60, size = 4
		Bool m_bLeavingGestures: 1; //offset = 60, size = 4
		Bool m_bIgnoreConvGestures: 1; //offset = 60, size = 4
		Bool m_bEnablePoseRMRotation: 1; //offset = 60, size = 4
		Bool m_bPoseRMSettingChanged: 1; //offset = 60, size = 4
		Bool m_bKillGesturesNow: 1; //offset = 60, size = 4
		Bool m_bKillPoseNow: 1; //offset = 60, size = 4
		Float m_fGestureBlendTime; //offset = 64, size = 4
		Array<BioGestDataKey> m_aNewGestureData; //offset = 68, size = 12
		Byte m_eGesturePriority; //offset = 80, size = 1
		Map_Mirror m_mapAnimSetRefCount; //offset = 84, size = 20

		void LeaveGesturesMode( Byte eLeaveRequestPriority );
		void EnterGesturesMode( Bool bAutoLeave, Byte eEntranceRequestPriority, Bool bForceGestureKill, Float fBlendTime );
	};

	struct BioGestTransition
	{
		Name nmDestPose; //offset = 48, size = 8
		Bool bNoTransAnim: 1; //offset = 56, size = 4
		Float fTransBlendTime; //offset = 60, size = 4
	};

	struct BioGestGesture
	{
		Name nmGesture; //offset = 48, size = 8
		Bool bOneShotAnim: 1; //offset = 56, size = 4
		Name nmGestureGroup; //offset = 60, size = 8
	};

	struct BioGestPose
	{
		Name nmPose; //offset = 0, size = 8
		Name nmAnimSet; //offset = 8, size = 8
		Name nmAnimSeq; //offset = 16, size = 8
		IntPoint tPosition; //offset = 24, size = 8
		Name nmGroup; //offset = 32, size = 8
		Name nmFemaleNodeName; //offset = 40, size = 8
	};

	struct BioARPUBodyConfig
	{
		Name nmCurveName; //offset = 0, size = 8
		Bool bUsesSingleKeyframe: 1; //offset = 8, size = 4
		Name nmAnimSet; //offset = 12, size = 8
		Name nmAnimSeq; //offset = 20, size = 8
		Float fStartBlendDuration; //offset = 28, size = 4
		Float fEndBlendDuration; //offset = 32, size = 4
	};

	class BioGestureRulesData: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGestureRulesData, Object, SFXGame )

	public:

		Array<BioARPUBodyConfig> m_aARPUItems; //offset = 60, size = 12
		MultiMap_Mirror m_mapARPUCurves; //offset = 72, size = 20
		Array<BioGestPose> m_aPosesTemp; //offset = 92, size = 12
		Array<BioGestTransition> m_aTransTemp; //offset = 104, size = 12
		Array<BioGestGesture> m_aGestTemp; //offset = 116, size = 12
		Map_Mirror m_mapPoses; //offset = 128, size = 20
		MultiMap_Mirror m_mapTransitions; //offset = 148, size = 20
		MultiMap_Mirror m_mapGestures; //offset = 168, size = 20
		Array<Name> m_aGestureGroups; //offset = 188, size = 12
		Name m_nmDefaultGestGroup; //offset = 200, size = 8
		Array<Name> m_aPoseGroups; //offset = 208, size = 12
		Name m_nmDefaultPoseGroup; //offset = 220, size = 8
	};

	struct BioWeaponPropData
	{
		Name nmWeaponBaseClassName; //offset = 0, size = 8
		Array<String> aWeaponClassPrefixes; //offset = 8, size = 12
		Array<String> aWeaponPackages; //offset = 20, size = 12
	};

	struct BioMeshPropData
	{
		Name nmPropName; //offset = 0, size = 8
		String sMesh; //offset = 8, size = 12
		Name nmAttachTo; //offset = 20, size = 8
		Vector vOffsetLocation; //offset = 28, size = 12
		Rotator rOffsetRotation; //offset = 40, size = 12
		Vector vOffsetScale; //offset = 52, size = 12
		Map_Mirror mapActions; //offset = 64, size = 20
	};

	struct BioMeshPropActionData
	{
		Name nmActionName; //offset = 0, size = 8
		String sEffect; //offset = 8, size = 12
		Bool bActivate: 1; //offset = 20, size = 4
		Name nmAttachTo; //offset = 24, size = 8
		Vector vOffsetLocation; //offset = 32, size = 12
		Rotator rOffsetRotation; //offset = 44, size = 12
		Vector vOffsetScale; //offset = 56, size = 12
	};

	struct BioGestCharOverride
	{
		Name nmFemale; //offset = 0, size = 8
		Name nmAsari; //offset = 8, size = 8
		Name nmTurian; //offset = 16, size = 8
		Name nmSalarian; //offset = 24, size = 8
		Name nmQuarian; //offset = 32, size = 8
		Name nmOther; //offset = 40, size = 8
		Name nmKrogan; //offset = 48, size = 8
		Name nmGeth; //offset = 56, size = 8
		Name nmOtherArtificial; //offset = 64, size = 8
	};

	class BioGestureRuntimeData: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGestureRuntimeData, Object, SFXGame )

	public:

		Map_Mirror m_mapAnimSetOwners; //offset = 60, size = 20
		Map_Mirror m_mapCharTypeOverrides; //offset = 80, size = 20
		Map_Mirror m_mapMeshProps; //offset = 100, size = 20
		BioWeaponPropData m_tWeaponPropData; //offset = 120, size = 32
		String m_sGlobalDefaultPose; //offset = 152, size = 12
	};

	class SFXGestures: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXGestures, Object, SFXGame )

	public:

		BioGestureRulesData* m_pRulesData; //offset = 60, size = 4
		BioGestureRuntimeData* m_pRuntimeData; //offset = 64, size = 4
		String GesturesPackageName; //offset = 68, size = 12

		void LoadRuntimeData();
	};

	enum EBioInterpolationMethod
	{
		BIO_INTERPOLATION_METHOD_LINEAR,
		BIO_INTERPOLATION_METHOD_LOG_E,
	};

	class BioInterpolator: public Object
	{
		DECLARE_PACKAGE_CLASS( BioInterpolator, Object, SFXGame )

	public:

		void InterpolateFloatCurve( Float output, InterpCurveFloat Curve, Float Source, Float Target, Float normalizedDisplacement );
		void InterpolateFloat( Float output, Byte InterpolationMethod, Float Source, Float Target, Float normalizedDisplacement );
		void InterpolateVector( Vector output, Byte InterpolationMethod, Vector Source, Vector Target, Float normalizedDisplacement );
		void InterpolateRotator( Rotator output, Byte InterpolationMethod, Rotator Source, Rotator Target, Float normalizedDisplacement );
	};

	struct BioDummyRenderCommandFence
	{
		Int nDummy; //offset = 0, size = 4
	};

	struct OffsetBonePos
	{
		Name nName; //offset = 0, size = 8
		Vector vPos; //offset = 8, size = 12
	};

	struct MorphFeature
	{
		Name sFeatureName; //offset = 0, size = 8
		Float Offset; //offset = 8, size = 4
	};

	class BioMorphFace: public Object
	{
		DECLARE_PACKAGE_CLASS( BioMorphFace, Object, SFXGame )

	public:

		SkeletalMesh* m_oBaseHead; //offset = 60, size = 4
		SkeletalMesh* m_oHairMesh; //offset = 64, size = 4
		Array<SkeletalMesh*> m_oOtherMeshes; //offset = 68, size = 12
		Array<MorphFeature> m_aMorphFeatures; //offset = 80, size = 12
		MorphTargetSet* m_oMorphTargetSet; //offset = 92, size = 4
		AnimTree* m_oAnimTree; //offset = 96, size = 4
		BioMaterialOverride* m_oMaterialOverrides; //offset = 100, size = 4
		Array<OffsetBonePos> m_aFinalSkeleton; //offset = 104, size = 12
		Array<Pointer> m_aVertexBuffers; //offset = 116, size = 12
		Pointer ReleaseResourcesFence; //offset = 128, size = 4

		Class* GetSaveObjectClass();
		void ApplyMaterialOverridesToPawn( BioPawn* Pawn );
		void ApplyMaterialOverrides( SkeletalMeshComponent* Mesh );
		void SetPosition( Int buffer, Int vert, Vector V );
		Vector GetPosition( Int buffer, Int vert );
		Int GetNumVerts( Int buffer );
		Int GetNumVertexBuffers();
		void RefreshBuffers( Array<Int> BufferIndices );
		void ScriptUpdateMorph();
	};

	class BioMorphFaceFESliderBase: public Object
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceFESliderBase, Object, SFXGame )

	public:

		String m_nName; //offset = 60, size = 12
		Bool m_bStepped: 1; //offset = 72, size = 4
		BioMorphFaceFrontEnd* m_oMorphFaceFrontEnd; //offset = 76, size = 4
	};

	class BioMorphFaceFESliderColour: public BioMorphFaceFESliderBase
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceFESliderColour, BioMorphFaceFESliderBase, SFXGame )

	public:

		String m_sParameterName; //offset = 80, size = 12
		Array<Color> m_acColours; //offset = 92, size = 12
	};

	class BioMorphFaceFESliderHair: public BioMorphFaceFESliderBase
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceFESliderHair, BioMorphFaceFESliderBase, SFXGame )

	public:
	};

	class BioMorphFaceFESliderMorph: public BioMorphFaceFESliderBase
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceFESliderMorph, BioMorphFaceFESliderBase, SFXGame )

	public:

		Bool m_bSingle: 1; //offset = 80, size = 4
		String m_sMorph_Positive; //offset = 84, size = 12
		String m_sMorph_Negative; //offset = 96, size = 12
		Float m_fRange; //offset = 108, size = 4
		Float m_fRandomRange; //offset = 112, size = 4
	};

	class BioMorphFaceFESliderScalar: public BioMorphFaceFESliderBase
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceFESliderScalar, BioMorphFaceFESliderBase, SFXGame )

	public:

		String m_sParameterName; //offset = 80, size = 12
		Array<Float> m_afValues; //offset = 92, size = 12
	};

	class BioMorphFaceFESliderSetMorph: public BioMorphFaceFESliderBase
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceFESliderSetMorph, BioMorphFaceFESliderBase, SFXGame )

	public:

		String m_sMorphName; //offset = 80, size = 12
		Array<Float> m_afValues; //offset = 92, size = 12
	};

	class BioMorphFaceFESliderTexture: public BioMorphFaceFESliderBase
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceFESliderTexture, BioMorphFaceFESliderBase, SFXGame )

	public:

		String m_sParameterName; //offset = 80, size = 12
		Array<Texture*> m_atTexture; //offset = 92, size = 12
	};

	enum EBioMorphUtilityHairComponentType
	{
		BMU_HairComponent_Hair,
		BMU_HairComponent_Other,
	};

	enum EBioMorphUtilityComponentType
	{
		BMU_Component_Unknown,
		BMU_Component_Picker,
		BMU_Component_Slider,
		BMU_Component_Combo,
	};

	struct ScalarData
	{
		Name m_nParamName; //offset = 0, size = 8
		Float m_fScalarValue; //offset = 8, size = 4
	};

	struct HairComponent
	{
		String StyleName; //offset = 0, size = 12
		String MeshName; //offset = 12, size = 12
		SkeletalMesh* HairMesh; //offset = 24, size = 4
		String ScalpMorphName; //offset = 28, size = 12
		Float ScalpMorphWeight; //offset = 40, size = 4
		Byte HairType; //offset = 44, size = 1
		Array<TextureData> m_aHairTextures; //offset = 48, size = 12
		Array<ScalarData> m_aHairScalars; //offset = 60, size = 12
	};

	struct HairData
	{
		String PackageName; //offset = 0, size = 12
		String HairMorphSpecMaskName; //offset = 12, size = 12
		Array<HairComponent> HairComponents; //offset = 24, size = 12
	};

	struct AdditionalData
	{
		HairData Hair; //offset = 0, size = 36
	};

	struct MaterialPanel
	{
		String Name; //offset = 0, size = 12
		Array<MaterialGroup> Groups; //offset = 12, size = 12
	};

	struct MaterialData
	{
		Array<MaterialPanel> Panels; //offset = 0, size = 12
	};

	struct MaterialComponent
	{
		String Label; //offset = 0, size = 12
		Byte Type; //offset = 12, size = 1
		String Name; //offset = 16, size = 12
		String Panel; //offset = 28, size = 12
		String ParameterName; //offset = 40, size = 12
		Array<String> Params; //offset = 52, size = 12
	};

	struct MaterialGroup
	{
		String Name; //offset = 0, size = 12
		Array<MaterialComponent> Components; //offset = 12, size = 12
	};

	struct TextureData
	{
		Name m_nParamName; //offset = 0, size = 8
		Texture* m_oTexture; //offset = 8, size = 4
	};

	class BioMorphUtility: public Object
	{
		DECLARE_PACKAGE_CLASS( BioMorphUtility, Object, SFXGame )

	public:
	};

	class SFXMorphFaceFrontEndDataSource: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXMorphFaceFrontEndDataSource, Object, SFXGame )

	public:

		AdditionalData AdditionalParams; //offset = 60, size = 36
		Array<Category> MorphCategories; //offset = 96, size = 12
		Slider ModifierData; //offset = 108, size = 84
		BioMorphFace* MorphFace; //offset = 192, size = 4
		AnimTree* MorphAnimTree; //offset = 196, size = 4
		MorphTargetSet* MorphTargetSet; //offset = 200, size = 4
		Array<Texture2D*> Textures; //offset = 204, size = 12
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> NameHeadIndexMap; //offset = 216, size = 20
		Array<BaseHeads> m_aDefaultSettings; //offset = 236, size = 12
		Array<BaseHeads> m_aBaseHeads; //offset = 248, size = 12
		String m_s2DAPackage; //offset = 260, size = 12
		String m_sMorph2DA; //offset = 272, size = 12
		String m_sMorphBaseMale; //offset = 284, size = 12
		String m_sMorphBaseFemale; //offset = 296, size = 12
		String m_sMorphAnimTree; //offset = 308, size = 12
		String m_sMorphTargetSetMale; //offset = 320, size = 12
		String m_sMorphTargetSetFemale; //offset = 332, size = 12
		Bool m_bDebugStrings: 1; //offset = 344, size = 4
		Bool PlayerIsMale: 1; //offset = 344, size = 4
	};

	enum EBioMorphFrontendSliderType
	{
		BMFE_SLIDER_MORPH_SINGLE,
		BMFE_SLIDER_MORPH_DOUBLE,
	};

	struct BaseSliders
	{
		String m_sSliderName; //offset = 0, size = 12
		Float m_fValue; //offset = 12, size = 4
	};

	struct BaseHeads
	{
		Array<BaseSliders> m_fBaseHeadSettings; //offset = 0, size = 12
	};

	struct Category
	{
		String m_sCatName; //offset = 0, size = 12
		Int m_iCatIndex; //offset = 12, size = 4
		Int m_iStringRef; //offset = 16, size = 4
		Int m_iDescriptionStringRef; //offset = 20, size = 4
		Array<Slider> m_aoSliders; //offset = 24, size = 12
	};

	struct FaceData
	{
		AdditionalData m_pAdditionalParams; //offset = 0, size = 36
		Array<Category> m_oCategories; //offset = 36, size = 12
	};

	struct SliderModifier
	{
		String m_sName; //offset = 0, size = 12
		Array<Float> m_aRandMin; //offset = 12, size = 12
		Array<Float> m_aRandMax; //offset = 24, size = 12
		Array<SliderModifierSliderData> m_aSliders; //offset = 36, size = 12
	};

	struct Slider
	{
		String m_sName; //offset = 0, size = 12
		Int m_iIndex; //offset = 12, size = 4
		Int m_iValue; //offset = 16, size = 4
		Bool m_bNotched: 1; //offset = 20, size = 4
		Int m_iSteps; //offset = 24, size = 4
		Int m_iStringRef; //offset = 28, size = 4
		Int m_iDescriptionStringRef; //offset = 32, size = 4
		Array<BioMorphFaceFESliderBase*> m_aoSliderData; //offset = 36, size = 12
		Array<Float> m_fRandWeights; //offset = 48, size = 12
		Float m_fRandWeightsTotal; //offset = 60, size = 4
		Float m_fRandMin; //offset = 64, size = 4
		Float m_fRandMax; //offset = 68, size = 4
		Array<SliderModifier> m_aSliderModifiers; //offset = 72, size = 12
	};

	struct SliderModifierSliderData
	{
		Array<BioMorphFaceFESliderBase*> m_aoSliderData; //offset = 0, size = 12
		Array<Float> m_fRandWeights; //offset = 12, size = 12
		Float m_fRandWeightsTotal; //offset = 24, size = 4
	};

	class BioMorphFaceFrontEnd: public BioMorphUtility
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceFrontEnd, BioMorphUtility, SFXGame )

	public:

		SkeletalMeshComponent* m_oHeadMeshComp; //offset = 60, size = 4
		SkeletalMeshComponent* m_oHairMeshComp; //offset = 64, size = 4
		BioMorphFace* m_oOriginalFace; //offset = 68, size = 4
		BioMorphFace* m_oMorphFace; //offset = 72, size = 4
		MaterialInstanceConstant* m_oOriginalMaterial; //offset = 76, size = 4
		SkeletalMesh* m_oOriginalMesh; //offset = 80, size = 4
		FaceData m_oFaceData; //offset = 84, size = 48
		Bool m_bDebugStrings: 1; //offset = 132, size = 4
		String m_sPlayerName; //offset = 136, size = 12
		BioPawnBehavior* m_oBehavior; //offset = 148, size = 4
		BioPawn* m_oPawn; //offset = 152, size = 4
		BaseHeads m_oBaseSettings; //offset = 156, size = 12
		Array<BaseHeads> m_aBaseHeads; //offset = 168, size = 12
		Slider m_pModifierData; //offset = 180, size = 84
		Int m_iCurrentBaseHead; //offset = 264, size = 4

		void SelectPreviousBaseHead();
		void SelectNextBaseHead();
		void SetPlayerName( String sPlayerName );
		void CleanUp();
		void HandleSliderChange( Int categoryIndex, Int sliderIndex, Int SliderValue, Bool bUpdate );
		Bool GetSliderNotched( Int categoryIndex, Int sliderIndex );
		Int GetSliderValue( Int categoryIndex, Int sliderIndex );
		Int GetSliderStep( Int categoryIndex, Int sliderIndex );
		Int GetSliderMax( Int categoryIndex, Int sliderIndex );
		Int GetSliderMin( Int categoryIndex, Int sliderIndex );
		Int GetSliderDesc( Int categoryIndex, Int sliderIndex );
		Int GetSliderLabel( Int categoryIndex, Int sliderIndex );
		Int GetNumSlidersInCategory( Int categoryIndex );
		Int GetCategoryDescription( Int categoryIndex );
		Int GetCategoryString( Int categoryIndex );
		Int GetNumberOfFeatureCategories();
		void CalibrateToPawn( BioPawn* pSrcPawn, Bool bUpdate );
		void ResetCategory( Int nCategory, Bool bUpdate );
		void ResetAll();
		void RandomizeCategory( Int nCategory, Bool bUpdate );
		void RandomizeAll();
		void Initialize( SFXMorphFaceFrontEndDataSource* Data, BioPawn* pThePlayer, Bool bPlayerIsMale, Bool bReset );
	};

	enum EBioCameraShakeVariant
	{
		BIO_CAMERA_SHAKE_VARIANT_PLACEHOLDER,
	};

	enum EBioCameraShakeType
	{
		BIO_CAMERA_SHAKE_TYPE_PLACEHOLDER,
	};

	class BioCameraShake: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCameraShake, Object, SFXGame )

	public:

		Byte Type; //offset = 60, size = 1
		Byte Variant; //offset = 61, size = 1
		Float m_startTime; //offset = 64, size = 4
		Float m_duration; //offset = 68, size = 4
		Float m_radius; //offset = 72, size = 4
		Float m_intensity; //offset = 76, size = 4
		RawDistributionFloat m_rawIntensityVsDistanceDistribution; //offset = 80, size = 28
		Float m_fadeInDuration; //offset = 108, size = 4
		RawDistributionFloat m_rawFadeInDistribution; //offset = 112, size = 28
		Float m_fadeOutDuration; //offset = 140, size = 4
		RawDistributionFloat m_rawFadeOutDistribution; //offset = 144, size = 28
		Bio2DA* m_database; //offset = 172, size = 4
		Name m_recordId; //offset = 176, size = 8
		Bool m_isRandomVariant: 1; //offset = 184, size = 4
	};

	class BioCameraShakeInterface: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCameraShakeInterface, Object, SFXGame )

	public:

		Rotator ComputeCameraRotationDelta();
	};

	class BioPawnCameraShakeInterface: public BioCameraShakeInterface
	{
		DECLARE_PACKAGE_CLASS( BioPawnCameraShakeInterface, BioCameraShakeInterface, SFXGame )

	public:

		Array<BioVisualEffect*> m_pendingRequests; //offset = 60, size = 12
		Array<BioVisualEffect*> m_pendingTerminations; //offset = 72, size = 12
		Map</*Warning unknown type, defaulting to*/ Int, /*Warning unknown type, defaulting to*/ Int> m_NodeToEffectMap; //offset = 84, size = 20
	};

	enum EActionStateVariable
	{
		BIO_ACTION_STATE_EXPLORE,
		BIO_ACTION_STATE_COMBAT,
	};

	enum EBioTechniqueWeapon
	{
		BioWepTech_Pistol,
		BioWepTech_Blaster,
		BioWepTech_Assault,
		BioWepTech_Sniper,
	};

	enum EBioItemWeaponMeleeType
	{
		ITEM_WEAPON_MELEE_KNIFE,
		ITEM_WEAPON_MELEE_SWORD,
		ITEM_WEAPON_MELEE_AXE,
		ITEM_WEAPON_MELEE_POLEARM,
	};

	enum EBioItemWeaponRangedType
	{
		ITEM_WEAPON_RANGED_PISTOL,
		ITEM_WEAPON_RANGED_SHOTGUN,
		ITEM_WEAPON_RANGED_ASSAULT_RIFLE,
	};

	enum EBioItemWeaponType
	{
		ITEM_WEAPTYPE_MELEE,
		ITEM_WEAPTYPE_RANGED,
	};

	enum EBioHeadGearType
	{
		BIO_HEAD_GEAR_TYPE_HELMET,
		BIO_HEAD_GEAR_TYPE_VISOR,
	};

	enum EBioEquipmentType
	{
		EQUIPMENT_TYPE_INVALID,
		EQUIPMENT_TYPE_ARMOR,
		EQUIPMENT_TYPE_OMNITOOL,
		EQUIPMENT_TYPE_WEAPON,
	};

	enum EBioArmorType
	{
		ARMOR_TYPE_NONE,
		ARMOR_TYPE_CLOTHING,
		ARMOR_TYPE_LIGHT,
	};

	enum EBioCapabilityTypes
	{
		BioCaps_AllTypes,
		BioCaps_SingleTargetAttack,
		BioCaps_AreaAttack,
		BioCaps_Disable,
		BioCaps_Debuff,
		BioCaps_Defense,
	};

	enum ELookAtTransitionType
	{
		LookAt_Default,
		LookAt_Snap,
	};

	enum EBioAnimSkidTurnState
	{
		eBioAnimSkid_NoState,
		eBioAnimSkid_StartingLeft,
		eBioAnimSkid_StartingRight,
		eBioAnimSkid_TurningLeft,
	};

	enum EBioPawnHeadGearComponent
	{
		BIO_PAWN_HEAD_GEAR_COMPONENT_VISOR,
		BIO_PAWN_HEAD_GEAR_COMPONENT_FACE_PLATE,
	};

	enum ECustomizableElementType
	{
		CustomizableType_None,
		CustomizableType_Torso,
		CustomizableType_Shoulders,
		CustomizableType_Arms,
		CustomizableType_Legs,
		CustomizableType_Helmet,
	};

	enum EAttachSlot
	{
		EASlot_Holster,
		EASlot_LowerBack,
		EASlot_LeftShoulder,
	};

	enum EInventoryResourceTypes
	{
		INV_RESOURCE_CREDITS,
		INV_RESOURCE_MEDIGEL,
		INV_RESOURCE_SALVAGE,
		INV_RESOURCE_GRENADES,
		INV_RESOURCE_RARE1_EEZO,
		INV_RESOURCE_RARE2_IRIDIUM,
	};

	enum EBioVFXPriority
	{
		BIO_VFX_PRIORITY_MIN,
		BIO_VFX_PRIORITY_LOW,
		BIO_VFX_PRIORITY_MEDIUM,
	};

	enum EBioFactionRelationship
	{
		BIO_Relation_Friendly,
		BIO_Relation_Neutral,
	};

	enum EBioFactionTypes
	{
		BIO_Faction_Player,
		BIO_Faction_Commoner,
		BIO_Faction_Ambient,
		BIO_Faction_Defender1,
		BIO_Faction_Defender2,
	};

	enum EBioPawnClassification
	{
		BPC_General,
		BPC_ActionStation,
		BPC_Ambient,
		BPC_UIWorld,
	};

	enum EDisableType
	{
		DT_AI,
		DT_Power,
	};

	enum EActionComplete_None
	{
		ACN_Cancelled,
		ACN_Success,
	};

	enum EActionComplete_Movement
	{
		ACM_Cancelled,
		ACM_Success,
		ACM_Failed,
		ACM_Dead,
	};

	enum EActionComplete_Combat
	{
		ACC_Cancelled,
		ACC_Success,
		ACC_Failed,
		ACC_Dead,
		ACC_TargetKilled,
		ACC_TimeOut,
		ACC_LowTargeting,
	};

	struct PlayerPatternInfo
	{
		VectorParameterValue Stripe1Param; //offset = 0, size = 40
		VectorParameterValue Stripe2Param; //offset = 40, size = 40
		VectorParameterValue Stripe3Param; //offset = 80, size = 40
	};

	struct PlayerTintInfo
	{
		VectorParameterValue TintParam; //offset = 0, size = 40
		VectorParameterValue PhongParam; //offset = 40, size = 40
	};

	struct PlayerSpecInfo
	{
		ScalarParameterValue SpecParam; //offset = 0, size = 28
		ScalarParameterValue SpecPwrParam; //offset = 28, size = 28
	};

	struct PlayerMeshInfo
	{
		String Male; //offset = 0, size = 12
		String MaleVisor; //offset = 12, size = 12
		String MaleFaceplate; //offset = 24, size = 12
		String MaleMaterialOverride; //offset = 36, size = 12
		String Female; //offset = 48, size = 12
		String FemaleVisor; //offset = 60, size = 12
		String FemaleFaceplate; //offset = 72, size = 12
		String FemaleMaterialOverride; //offset = 84, size = 12
		Bool bHasBreather: 1; //offset = 96, size = 4
		Bool bHideHead: 1; //offset = 96, size = 4
		Bool bHideHair: 1; //offset = 96, size = 4
	};

	struct CustomizableElement
	{
		Int Id; //offset = 0, size = 4
		Bool bCustomizable: 1; //offset = 4, size = 4
		Int Name; //offset = 8, size = 4
		Int Description; //offset = 12, size = 4
		Byte Type; //offset = 16, size = 1
		PlayerMeshInfo Mesh; //offset = 20, size = 100
		PlayerSpecInfo Spec; //offset = 120, size = 56
		PlayerTintInfo Tint; //offset = 176, size = 80
		PlayerPatternInfo Pattern; //offset = 256, size = 120
		Array<String> GameEffects; //offset = 376, size = 12
		Int PlotFlag; //offset = 388, size = 4
	};

	struct PlayerCustomColor3Value
	{
		ColorName ColorName; //offset = 0, size = 4
		Name ParameterName; //offset = 4, size = 8
		LinearColor ParameterValue; //offset = 12, size = 16
	};

	struct PlayerCustomColor2Value
	{
		ColorName ColorName; //offset = 0, size = 4
		Name ParameterName; //offset = 4, size = 8
		LinearColor ParameterValue; //offset = 12, size = 16
	};

	struct PlayerCustomColor1Value
	{
		ColorName ColorName; //offset = 0, size = 4
		Name ParameterName; //offset = 4, size = 8
		LinearColor ParameterValue; //offset = 12, size = 16
		Name PhongParameterName; //offset = 28, size = 8
		LinearColor PhongParameterValue; //offset = 36, size = 16
	};

	struct PlayerCustomSpecValue
	{
		SpecName SpecName; //offset = 0, size = 4
		ScalarParameterValue Spec; //offset = 4, size = 28
		ScalarParameterValue SpecPwr; //offset = 32, size = 28
	};

	struct PlayerCustomPatternColorValue
	{
		ColorName ColorName; //offset = 0, size = 4
		Name Stripe1ColorName; //offset = 4, size = 8
		LinearColor Stripe1ColorValue; //offset = 12, size = 16
		Name Stripe2ColorName; //offset = 28, size = 8
		LinearColor Stripe2ColorValue; //offset = 36, size = 16
		Name Stripe3ColorName; //offset = 52, size = 8
		LinearColor Stripe3ColorValue; //offset = 60, size = 16
	};

	struct PlayerCustomPatternValue
	{
		PatternName PatternName; //offset = 0, size = 4
		Name Stripe1ParameterName; //offset = 4, size = 8
		LinearColor Stripe1ParameterValue; //offset = 12, size = 16
		Name Stripe2ParameterName; //offset = 28, size = 8
		LinearColor Stripe2ParameterValue; //offset = 36, size = 16
		Name Stripe3ParameterName; //offset = 52, size = 8
		LinearColor Stripe3ParameterValue; //offset = 60, size = 16
	};

	class BioDefine: public Object
	{
		DECLARE_PACKAGE_CLASS( BioDefine, Object, SFXGame )

	public:
	};

	class SFXKActor: public KActor
	{
		DECLARE_PACKAGE_CLASS( SFXKActor, KActor, SFXGame )

	public:

		Float m_fPhysicsSoundLastTimePlayed; //offset = 692, size = 4
		Actor* m_aLastCollidedActor; //offset = 696, size = 4
		Bool bImmovable: 1; //offset = 700, size = 4
		Bool bKinematicUntilMoved: 1; //offset = 700, size = 4

		void ImpulseFragments( Vector Source, Vector Momentum, Vector Extent, Bool bVelChange );
		void TakeDamage( Float Damage, Controller* InstigatedBy, Vector HitLocation, Vector Momentum, Class* DamageType, TraceHitInfo HitInfo, Actor* DamageCauser );
		void TakeRadiusDamage( Controller* InstigatedBy, Float BaseDamage, Float DamageRadius, Class* DamageType, Float Momentum, Vector HurtOrigin, Bool bFullDamage, Actor* DamageCauser );
		void ExceededPhysicsThreshold( Actor* InstigatedBy, Int idx, SFXSeqEvt_ExceededPhysicsThreshold* exceededPhysicsEvent );
	};

	class BioPhysicsActor: public SFXKActor
	{
		DECLARE_PACKAGE_CLASS( BioPhysicsActor, SFXKActor, SFXGame )

	public:

		Float m_fHealth; //offset = 704, size = 4
		Float m_fCurrentHealth; //offset = 708, size = 4
		Bool m_bToughPlaceable: 1; //offset = 712, size = 4

		void TakeDamage( Float Damage, Controller* InstigatedBy, Vector HitLocation, Vector Momentum, Class* DamageType, TraceHitInfo HitInfo, Actor* DamageCauser );
		void TakeRadiusDamage( Controller* InstigatedBy, Float BaseDamage, Float DamageRadius, Class* DamageType, Float Momentum, Vector HurtOrigin, Bool bFullDamage, Actor* DamageCauser );
		void ChangeMaterialParameters();
	};

	class BioSVehicleSimTank: public SVehicleSimTank
	{
		DECLARE_PACKAGE_CLASS( BioSVehicleSimTank, SVehicleSimTank, SFXGame )

	public:

		InterpCurveFloat m_fLatFrictionScaleSteerCurve; //offset = 244, size = 16
		InterpCurveFloat m_fLongFrictionScaleSteerCurve; //offset = 260, size = 16
		InterpCurveFloat m_TorqueSplitRight; //offset = 276, size = 16
		InterpCurveFloat m_TorqueSplitLeft; //offset = 292, size = 16
		InterpCurveFloat m_TorqueCurve; //offset = 308, size = 16
		Float m_fPrevInputYaw; //offset = 324, size = 4
		Float m_fCurrentInputYaw; //offset = 328, size = 4
		Float m_fYawDeltaRate; //offset = 332, size = 4
	};

	class SFXKActorSpawnable: public KActorSpawnable
	{
		DECLARE_PACKAGE_CLASS( SFXKActorSpawnable, KActorSpawnable, SFXGame )

	public:

		Float m_fPhysicsSoundLastTimePlayed; //offset = 692, size = 4
		Actor* m_aLastCollidedActor; //offset = 696, size = 4
	};

	class SFXKAsset: public KAsset
	{
		DECLARE_PACKAGE_CLASS( SFXKAsset, KAsset, SFXGame )

	public:

		Float m_fPhysicsSoundLastTimePlayed; //offset = 524, size = 4
		Actor* m_aLastCollidedActor; //offset = 528, size = 4
	};

	class SFXKAssetSpawnable: public SFXKAsset
	{
		DECLARE_PACKAGE_CLASS( SFXKAssetSpawnable, SFXKAsset, SFXGame )

	public:
	};

	struct LookAtBoneDefinition
	{
		Name m_nBoneName; //offset = 0, size = 8
		Float m_fLimit; //offset = 8, size = 4
		Float m_fUpDownLimit; //offset = 12, size = 4
		Float m_fDelay; //offset = 16, size = 4
		Byte m_nLookAxis; //offset = 20, size = 1
		Byte m_nUpAxis; //offset = 21, size = 1
		Bool m_bSeparateUpDownLimit: 1; //offset = 24, size = 4
		Bool m_bUseUpAxis: 1; //offset = 24, size = 4
		Bool m_bUpAxisInLocalSpace: 1; //offset = 24, size = 4
		Bool m_bLookAtInverted: 1; //offset = 24, size = 4
		Bool m_bUpAxisInverted: 1; //offset = 24, size = 4
		Bool m_bUseAcceleration: 1; //offset = 24, size = 4
		Float m_fSpeedFactor; //offset = 28, size = 4
		Float m_fMaxAcceleration; //offset = 32, size = 4
		Float m_fMaxDeceleration; //offset = 36, size = 4
		Float m_fConversationStrength; //offset = 40, size = 4
		Bool m_bUseMasterBone: 1; //offset = 44, size = 4
		Name m_nmMasterBoneName; //offset = 48, size = 8
		Array<Name> m_anTargetBones; //offset = 56, size = 12
	};

	class BioLookAtDefinition: public Object
	{
		DECLARE_PACKAGE_CLASS( BioLookAtDefinition, Object, SFXGame )

	public:

		Array<LookAtBoneDefinition> BoneDefinitions; //offset = 60, size = 12
		Name RootAnimBoneName; //offset = 72, size = 8
		Byte RootAnimBoneLookAtAxis; //offset = 80, size = 1
		Byte RootAnimBoneUpAxis; //offset = 81, size = 1
		Bool RootAnimBoneLookAtInverted: 1; //offset = 84, size = 4
		Bool RootAnimBoneUpInverted: 1; //offset = 84, size = 4
		Bool RootBoneYawOnly: 1; //offset = 84, size = 4
		Float ValidTargetAngleRange; //offset = 88, size = 4
	};

	class BioLookAt: public Object
	{
		DECLARE_PACKAGE_CLASS( BioLookAt, Object, SFXGame )

	public:

		Actor* m_oTarget; //offset = 60, size = 4
		BioPawn* m_oPawn; //offset = 64, size = 4
		Int m_nRank; //offset = 68, size = 4
		Bool m_bDisabling: 1; //offset = 72, size = 4
		Float m_fLookAtNoticeTimer; //offset = 76, size = 4
		BioLookAtDefinition* m_Definition; //offset = 80, size = 4
		Array<BioPawnLookAtController*> m_Controllers; //offset = 84, size = 12
	};

	class BioSeqAct_SetLookAtTargetWithBoneDefs: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetLookAtTargetWithBoneDefs, SequenceAction, SFXGame )

	public:

		Actor* m_oTarget; //offset = 240, size = 4
		BioPawn* m_oPawn; //offset = 244, size = 4
	};

	class BioSeqAct_ToggleGlobalLookAt: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ToggleGlobalLookAt, SequenceAction, SFXGame )

	public:

		Bool ForceState: 1; //offset = 240, size = 4
		Bool State: 1; //offset = 240, size = 4
		Bool Instant: 1; //offset = 240, size = 4
	};

	struct DLCInfo_t
	{
		sDisplayName sDisplayName; //offset = 0, size = 4
		sDescription sDescription; //offset = 4, size = 4
		String sImageResource; //offset = 8, size = 12
		String sImageResourceFrame; //offset = 20, size = 12
		String sCreditsSection; //offset = 32, size = 12
	};

	class BioSFHandler_AdditionalContent: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_AdditionalContent, BioSFHandler, SFXGame )

	public:

		Array<DLCInfo_t> DLCInfo; //offset = 104, size = 12
	};

	const char* AreaMap_UpdateZoom = 5;
	const char* AreaMap_ReturnToNormandy = 4;
	const char* AreaMap_OpenJournal = 3;
	const char* AreaMap_SetDestination = 2;
	const char* AreaMap_Initialize = 1;

	class BioSFHandler_AreaMap: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_AreaMap, BioSFHandler, SFXGame )

	public:

		Float m_fScrollSpeed; //offset = 104, size = 4
		Float m_fCursorSpeed; //offset = 108, size = 4
		Int m_nLeftScrollDelta; //offset = 112, size = 4
		Int m_nRightScrollDelta; //offset = 116, size = 4
		Vector m_vLeftInput; //offset = 120, size = 12
		Vector m_vRightInput; //offset = 132, size = 12
		String m_sMapName; //offset = 144, size = 12
		Box m_levelBox; //offset = 156, size = 28
		Bio2DA* m_pAreaMapTable; //offset = 184, size = 4
		Float m_fCurrentZoom; //offset = 188, size = 4
		Bool m_bWaitingForMsgBox: 1; //offset = 192, size = 4

		void RTNConfirm( Bool bAPressed, Int nContext );
	};

	enum BlackScreenDisplayModes
	{
		BlackScreenMode_None,
		BlackScreenMode_TurnBlackOn,
		BlackScreenMode_TurnBlackOff,
	};

	class BioSFHandler_BlackScreen: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_BlackScreen, BioSFHandler, SFXGame )

	public:

		Byte m_eDisplayMode; //offset = 104, size = 1
		String m_ASPath; //offset = 108, size = 12
		Float m_CurrentAlpha; //offset = 120, size = 4
		Float m_AccumulatedFadeTime; //offset = 124, size = 4
		Float m_FadeTime; //offset = 128, size = 4

		Bool IsFading();
		void Show( Bool bWithFade );
		void Hide( Bool bWithFade );
		void OnPanelAdded();
	};

	const char* srCancel = 1533;
	const char* srConfirm = 1533;
	const char* srMainMenuConfirm = 1762;
	const char* srExitConfirm = 1762;
	const char* ConfirmExit = 7;
	const char* PExitGame = 6;
	const char* ConfirmMainMenu = 5;
	const char* GotoMainMenu = 4;
	const char* BWInitialized = 3;
	const char* CloseMenu = 2;
	const char* PickSegment = 1;

	struct BWPageStruct
	{
		Name Tag; //offset = 0, size = 8
		srLabel srLabel; //offset = 8, size = 4
		BioSFHandler* oHandler; //offset = 12, size = 4
		Byte Type; //offset = 16, size = 1
	};

	class BioSFHandler_BrowserWheel: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_BrowserWheel, BioSFHandler, SFXGame )

	public:

		Vector vInput; //offset = 104, size = 12
		Float fLastRadius; //offset = 116, size = 4
		Array<BWPageStruct> lstPages; //offset = 120, size = 12
		SFXPowerLevelUpHelper* m_Helper; //offset = 132, size = 4

		void OnPanelRemoved();
		void OnPanelAdded();
		void ExitGame();
		void MainMenuConfirm( Bool bAPressed, Int nContext );
		void SetResourceValues( ASParams stParam, Array<ASParams> lstParams, PlayerController* PC, BioPawn* oPlayerPawn, SFXInventoryManager* oInventory, SFXHeavyWeapon* oWeap );
		void InitializeBrowser( BioWorldInfo* oBWI, BioPlayerController* PC, Int I, String sReason, ASParams stParam, Array<ASParams> lstParams, SubPageState oSubPageState, Bool bAbleToSave, Bool bAbleToLoad, Int nIndex, Byte StateWithOverride );
		void DetermineJournalCodexUpdateStatus();
		void DetermineSquadUpdateStatus( Int I, Int nSquadSize, Bool bAlert, BioPawn* oPawn, BioPlayerSquad* oSquad, BioWorldInfo* oBWI );
		void Update( Float fDeltaT, Rotator R, Float fRadius, ASParams stParam, Array<ASParams> lstParams );
		void HandleInputEvent( Byte Event, Float fValue );
		void HandleEvent( Byte nCommand, Array<String> lstArguments );
		void ShowSelectedPanel( Int nPanel, BioSFManager* oManager, MassEffectGuiManager* oGuiMan, BioSFPanel* oNewPanel, BioSFHandler_MessageBox* oMsgBox, BioMessageBoxOptionalParams stParams );
	};

	enum EChoiceGUIHandlerID
	{
		CHOICEHANDLER_NONE,
		CHOICEHANDLER_SELECTED,
		CHOICEHANDLER_EXIT,
	};

	class BioSFHandler_ChoiceGUI: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_ChoiceGUI, BioSFHandler, SFXGame )

	public:

		SFXGameChoiceGUIData* m_ChoiceData; //offset = 104, size = 4
		Int nInputCallbackContext; //offset = 108, size = 4
		m_srResourceTextCredits m_srResourceTextCredits; //offset = 112, size = 4
		m_srResourceTextEzo m_srResourceTextEzo; //offset = 116, size = 4
		m_srResourceTextIridium m_srResourceTextIridium; //offset = 120, size = 4
		m_srResourceTextPalladium m_srResourceTextPalladium; //offset = 124, size = 4
		m_srResourceTextPlatinum m_srResourceTextPlatinum; //offset = 128, size = 4
		m_srResourceTextProbes m_srResourceTextProbes; //offset = 132, size = 4
		m_srResourceCostFormat m_srResourceCostFormat; //offset = 136, size = 4
		m_srResourceAvailFormat m_srResourceAvailFormat; //offset = 140, size = 4
		String m_sResourceCostColorHTML_CanAfford; //offset = 144, size = 12
		String m_sResourceCostColorHTML_CantAfford; //offset = 156, size = 12
		Int m_nInfoScrollSpeed; //offset = 168, size = 4
		Bool m_bStopScroll: 1; //offset = 172, size = 4
		__InputCallback__Delegate __InputCallback__Delegate; //offset = 176, size = 12
		__UpdateCallback__Delegate __UpdateCallback__Delegate; //offset = 188, size = 12
		__UpdateCallbackEx__Delegate __UpdateCallbackEx__Delegate; //offset = 200, size = 12

		void CleanUpDelegateReferences();
		void GameSessionEnded();
		Int GetResourceCount( Int nResource, BioPlayerController* PC, BioPawn* pPawn, Byte eResource, Int nValue );
		void onExIntUpdateOptionValues( Int nResource, Array<ASParams> lstParams, Int nResourceCount, Byte eResource );
		void OnPanelRemoved();
		void OnPanelAdded();
		void ScrollText( Float fValue, Array<ASParams> lstParams, ASParams aParam );
		void HandleInputEvent( Byte Event, Float fValue );
		String GetResourceText( Byte eResource );
		void Initialize( SFXGameChoiceGUIData* ChoiceData );
		void HideChoiceGUI( Bool bRemove );
		void ShowChoiceGUI();
		void SetUpdateDelegate( pDelegate pDelegate );
		void SetInputDelegate( pDelegate pDelegate, Int nContext );
		void UpdateCallbackEx( Float fDeltaT, Object* oChoiceGUI );
		void UpdateCallback( Float fDeltaT, BioSFHandler_ChoiceGUI* oChoiceGUI );
		void InputCallback( Bool bAPressed, Int nContext );
	};

	const char* INVESTIGATE_OPTION = -3;
	const char* RETURN_OPTION = -2;
	const char* UNUSED_SLOT = -1;
	const char* InitializationComplete = 7;
	const char* SelectParagonInterrupt = 6;
	const char* SelectRenegadeInterrupt = 5;
	const char* QueueEntry = 4;
	const char* ShowReplyWheel = 3;
	const char* SelectEntry = 2;
	const char* SkipNode = 1;
	const char* MODE_Illegal = 4;
	const char* MODE_Intimidate = 3;
	const char* MODE_Charm = 2;
	const char* MODE_Investigate = 1;
	const char* MODE_None = 0;

	enum BioConvWheelPositions
	{
		REPLY_WHEEL_MIDDLE_RIGHT,
		REPLY_WHEEL_BOTTOM_RIGHT,
		REPLY_WHEEL_BOTTOM_LEFT,
		REPLY_WHEEL_MIDDLE_LEFT,
	};

	class BioSFHandler_Conversation: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Conversation, BioSFHandler, SFXGame )

	public:

		m_srTextInvestigate m_srTextInvestigate; //offset = 104, size = 4
		m_srTextReturn m_srTextReturn; //offset = 108, size = 4
		Int m_nReplyLocationMiddleLeft; //offset = 112, size = 4
		Int m_nReplyLocationTopLeft; //offset = 116, size = 4
		Int m_nReplyLocationBottomLeft; //offset = 120, size = 4
		Int m_nReplyLocationTopRight; //offset = 124, size = 4
		Int m_nReplyLocationBottomRight; //offset = 128, size = 4
		Int m_nReplyLocationMiddleRight; //offset = 132, size = 4
		Int m_nInvestigateLocationMiddleLeft; //offset = 136, size = 4
		Int m_nInvestigateLocationTopLeft; //offset = 140, size = 4
		Int m_nInvestigateLocationBottomLeft; //offset = 144, size = 4
		Int m_nInvestigateLocationTopRight; //offset = 148, size = 4
		Int m_nInvestigateLocationBottomRight; //offset = 152, size = 4
		Int m_nInvestigateLocationMiddleRight; //offset = 156, size = 4
		Vector vInput; //offset = 160, size = 12
		Float fLastRadius; //offset = 172, size = 4
		Bool m_bDisplayInvestigateSubMenu: 1; //offset = 176, size = 4
		Bool m_bDisplayingWheel: 1; //offset = 176, size = 4
		Bool m_bDisplayingParagonInterrupt: 1; //offset = 176, size = 4
		Bool m_bDIsplayingRenegadeInterrupt: 1; //offset = 176, size = 4
		Int m_aReplyLocations[6]; //offset = 180, size = 4
		Int m_aInvestigateLocations[6]; //offset = 204, size = 4
		Int m_nSlotsUsed[6]; //offset = 228, size = 4
		Bool m_bSFScreenInitialized: 1; //offset = 252, size = 4
		Bool m_bWasTriggered: 1; //offset = 252, size = 4

		void Enforce16x9( Bool bVal );
		Bool IsVisible();
		void SetVisible( Bool bVal );
		Int GetInvestigateReplyCount( BioConversation* oConversation, Int nCount, Int I );
		Byte GetReplyLocation( Int nReplyCategory, Int I );
		Byte GetInvestigateReplyLocation( Int nInvestigateSlot, Int I, Int J );
		Bool SelectConversationEntry( Byte nWheelLocation, BioWorldInfo* oBioWorldInfo, BioConversation* oConversation, Bool bChangingMenu, Int nReplyIndex );
		Int MapGuiStyleToOptionMode( Byte eGUIStyle, Int nMode );
		void UpdateConversationOptions( BioConversation* oConversation, String sConversationOptions, Int nConversationOptionModes, Byte ePosition, Int I, Int nInvestigateReplyCount, Int nInvestigateReplyIteration, Int nReplyCategory, srOption srOption, Bool bDisplayReply, Bool bFirstInvestigateFound, ASParams stParam, Array<ASParams> lstParams );
		void Update( Float fDeltaT, BioWorldInfo* oBioWorldInfo, BioSubtitles* oSubtitles, BioConversation* oConversation, ASParams stParam, Array<ASParams> lstParams, Color subtitleColor, Bool bAlert, BioPlayerController* PC );
		void CalculateArrowPosition( ASParams stParam, Array<ASParams> lstParams, Float fRadius, Rotator R );
		void UpdateInterruptVisuals( BioConversation* oConversation, Bool bDisplayRenegade, Bool bDisplayParagon );
		void HandleInputEvent( Byte Event, Float fValue );
		void HandleEvent( Byte nCommand, Array<String> lstArguments, BioWorldInfo* oBioWorldInfo );
		void OnPanelRemoved();
		void OnPanelAdded( ASParams stParam, Array<ASParams> lstParams );
		Int GetNumReplies( BioConversation* oConversation );
		void InterruptRenegade();
		void InterruptParagon();
		void SkipConversation();
		void SelectConversationSegment();
		void HighlightDefaultConvSegment();
	};

	const char* CreditsCancel = 4;
	const char* CreditScrollComplete = 3;
	const char* GetNextCredit = 2;
	const char* InitializeCredits = 1;

	struct BioCreditsDetails
	{
		srHeading srHeading; //offset = 0, size = 4
		srTitle srTitle; //offset = 4, size = 4
		srNames srNames; //offset = 8, size = 4
	};

	class BioSFHandler_Credits: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Credits, BioSFHandler, SFXGame )

	public:

		Float fFadeTime; //offset = 104, size = 4
		Float fHoldTime; //offset = 108, size = 4
		Float fScrollTime; //offset = 112, size = 4
		srConfirmExitMessage srConfirmExitMessage; //offset = 116, size = 4
		srExitYes srExitYes; //offset = 120, size = 4
		srExitNo srExitNo; //offset = 124, size = 4
		Array<BioCreditsDetails> lstFlashingCredits; //offset = 128, size = 12
		Array<BioCreditsDetails> lstScrollingCredits; //offset = 140, size = 12
		Array<BioCreditsDetails> lstDLCScrollingCredits; //offset = 152, size = 12
		Int nCreditIndex; //offset = 164, size = 4
		Bool bFromMainMenu: 1; //offset = 168, size = 4
		Bool bFromAdditionalContent: 1; //offset = 168, size = 4
		Bool bFromPRCChoiceGUI: 1; //offset = 168, size = 4
		Bool bFromKismet: 1; //offset = 168, size = 4
		__OnCloseCallback__Delegate __OnCloseCallback__Delegate; //offset = 172, size = 12

		void SetFromPRCChoiceGUI();
		void SetFromAdditionalContent();
		void SetFromMainMenu();
		void PopulateScrollingCredits( Int I, ASParams stParam, Array<ASParams> lstParams );
		void SendFlashingCredit( ASParams stParam, Array<ASParams> lstParams );
		void SetupCreditDetails( ASParams stParam, Array<ASParams> lstParams );
		void EndCredits( BioSFPanel* oNewPanel );
		void ConfirmButtonPressed( Bool bAPressed, Int nContext );
		void OnCancel( BioSFHandler_MessageBox* oMsgBox, BioMessageBoxOptionalParams stParams );
		void Pause( Bool B );
		void HandleInputEvent( Byte Event, Float fValue );
		void HandleEvent( Byte nCommand, Array<String> lstArguments );
		Bool SetDataFromIniFile( String a_sSection );
		void SetOnCloseCallback( fn_OnCloseDelegate fn_OnCloseDelegate );
		void OnCloseCallback();
		void OnPanelRemoved( Float fFXVolume, BioWorldInfo* WorldInfo, BioPlayerController* PC, SFXProfileSettings* Profile );
		void OnPanelAdded();
	};

	struct CodexImageDetails
	{
		Int nID; //offset = 0, size = 4
		String sName; //offset = 4, size = 12
		Texture2D* oTexture; //offset = 16, size = 4
	};

	struct DataCodexEntryDetails
	{
		Int nSectionID; //offset = 0, size = 4
		String sName; //offset = 4, size = 12
		Bool bUpdated: 1; //offset = 16, size = 4
		Pointer pEntry; //offset = 20, size = 4
	};

	class BioSFHandler_DataCodex: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_DataCodex, BioSFHandler, SFXGame )

	public:

		Array<DataCodexEntryDetails> lstSections; //offset = 104, size = 12
		Float m_fScrollValue; //offset = 116, size = 4
		Bool m_bAnalogScroll: 1; //offset = 120, size = 4
		Int m_nVoiceOverPage; //offset = 124, size = 4
		Float m_fTimeUntilVoiceOver; //offset = 128, size = 4
		WwiseAudioComponent* m_oVoiceOver; //offset = 132, size = 4
		Array<CodexImageDetails> lstImages; //offset = 136, size = 12
		Float fVoiceOverDelay; //offset = 148, size = 4
		Float fVoiceOverCancelFadeOut; //offset = 152, size = 4
		String sDefaultCodexImage; //offset = 156, size = 12
		String sExternalTextureLink; //offset = 168, size = 12
		srMarkAllCompleteMessage srMarkAllCompleteMessage; //offset = 180, size = 4
		srMarkAllCompleteMessageConfirm srMarkAllCompleteMessageConfirm; //offset = 184, size = 4
		srMarkAllCompleteMessageCancel srMarkAllCompleteMessageCancel; //offset = 188, size = 4
		Package* m_pImagePackage; //offset = 192, size = 4

		void OnSwapTabs();
		void OnEnteredSubItem( Int nSection, Int nPage );
		void OnExpandItem( Int nSection );
		void OnExitedItem();
		void OnEnteredItem( Int nSection );
		void OnSortItems();
		void OnSetAllItemsViewed();
		void OnInitialize();
		void MarkAllSectionsViewed();
	};

	enum BioDUIElements
	{
		BIO_DUI_PassiveTimer,
		BIO_DUI_PassiveCounter,
		BIO_DUI_PassiveText,
		BIO_DUI_PassiveBar,
		BIO_DUI_PassiveBarMarker1,
		BIO_DUI_PassiveBarMarker2,
		BIO_DUI_ModalBar,
		BIO_DUI_ModalBarMarker1,
		BIO_DUI_ModalBarMarker2,
		BIO_DUI_ModalCounter,
		BIO_DUI_ModalTimer,
		BIO_DUI_ModalText,
	};

	struct BioDUIElementStatus
	{
		Bool bVisible: 1; //offset = 0, size = 4
		Bool bFading: 1; //offset = 0, size = 4
	};

	struct BioDUIPulseDetails
	{
		Byte nElement; //offset = 0, size = 1
		Float fHalfCycleTime; //offset = 4, size = 4
		Float fMinAlpha; //offset = 8, size = 4
		Float fCurCycle; //offset = 12, size = 4
	};

	struct BioDUITimerDetails
	{
		Float fCurTime; //offset = 0, size = 4
		Float fEndTime; //offset = 4, size = 4
		Float fIntervalTime; //offset = 8, size = 4
		Float fNextInterval; //offset = 12, size = 4
		Bool bIncrementing: 1; //offset = 16, size = 4
		Bool bIntervalTriggered: 1; //offset = 16, size = 4
		Bool bCompleted: 1; //offset = 16, size = 4
		Bool bRunning: 1; //offset = 16, size = 4
		Bool bActive: 1; //offset = 16, size = 4
		Bool bFirstUpdate: 1; //offset = 16, size = 4
	};

	class BioSFHandler_DesignerUI: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_DesignerUI, BioSFHandler, SFXGame )

	public:

		Bool m_bCanInvoke: 1; //offset = 104, size = 4
		BioDUITimerDetails stModalTimer; //offset = 108, size = 20
		BioDUITimerDetails stPassiveTimer; //offset = 128, size = 20
		Array<BioDUIPulseDetails> lstPulsingElements; //offset = 148, size = 12
		BioDUIElementStatus lstElementStatus[22]; //offset = 160, size = 4
		Int nElementVisibleCount; //offset = 248, size = 4
		Int m_nLayout; //offset = 252, size = 4

		void OnPanelAdded();
		void ExIntInitialize();
		Float GetTimerValue( Bool bModalTimer );
		void SetTimerDetails( Bool bModalTimer, Float fStartTime, Float fEndTime, Float fInterval );
		Bool IsQuasarLayout();
		void SetQuasarLayout( Bool bShow );
		void SetBarFillDirection( Bool bModalBar, Bool bLeftToRight );
		void SetBarFillPercent( Bool bModalBar, Int nPercent );
		void SetBarMarkerPoints( Bool bModalBar, Int nMarker1, Int nMarker2 );
		void SetCounterValue( Bool bModalCounter, Int nValue );
		void SetElementText( Byte nElement, String sText );
		void SetTextStringRef( Byte nElement, srText srText );
		void ClearElementPulse( Byte nElement );
		Int SetupElementPulse( Byte nElement, Float fMinAlpha, Float fCycleTime );
		void SetElementAlpha( Byte nElement, Float fAlpha );
		void SetElementColor( Byte nElement, Color stColor );
		void SetElementVisible( Byte nElement, Bool bVisible, Float fFadeTime );
		Bool IsActive( Bool bModal );
		void ClearAll( Bool bModal );
	};

	class SFXSFHandler_AreaMap: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_AreaMap, BioSFHandler, SFXGame )

	public:

		DOFAndBloomEffect* m_DOFEffect; //offset = 104, size = 4
		Bool m_bFromBrowserWheel: 1; //offset = 108, size = 4

		void RemoveDOFEffect();
		void AddDOFEffect( DOFAndBloomEffect* i_DOFEffect );
		void HandleInputEvent( Byte Event, Float fValue );
		void Close();
		void BeginClose();
		void ProcessPlayer( SFXAreaMapData* oMapData, SFXPawn_Player* pPlayer, Array<ASParams> lstParams, Float PxX, Float PxY, BioPlayerController* PC );
		void SetMap( SFXAreaMapData* oMapData, Array<ASParams> lstParams );
		Bool Initialize( Bool bFromBrowserWheel, SFXAreaMapData* oMapData );
		void PauseMenuAdditionalProcessing();
		void OnPanelAdded();
	};

	enum EAGUI_CerberusIntroResult
	{
		EAG_CI_REDEEM_CODE,
		EAG_CI_BUY_CODE,
	};

	enum EAGUI_EmailPswdMismatchResult
	{
		EAG_EPM_SUBMIT,
		EAG_EPM_EMAIL_PSWD,
	};

	enum EAGUI_NucleusLoginResult
	{
		EAG_NL_LOGIN,
		EAG_NL_CREATE,
	};

	enum EAGUI_MsgBoxResult
	{
		EAG_MSGBOX_BTN = 2,
		EAG_MSGBOX_BTN = 3,
	};

	class SFXSFHandler_EANetworking: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_EANetworking, BioSFHandler, SFXGame )

	public:

		BioSFHandler_Keyboard* m_oKeyboard; //offset = 104, size = 4
		m_srKeyboardEmailTitle m_srKeyboardEmailTitle; //offset = 108, size = 4
		m_srKeyboardPasswordTitle m_srKeyboardPasswordTitle; //offset = 112, size = 4
		m_srCerberusCodeTitle m_srCerberusCodeTitle; //offset = 116, size = 4
		Int m_nMaxEmailLength; //offset = 120, size = 4
		Int m_nMaxPasswordLength; //offset = 124, size = 4
		Int m_nMaxCerberusCodeLength; //offset = 128, size = 4
		__GuiCallback_SubmitIntroPage__Delegate __GuiCallback_SubmitIntroPage__Delegate; //offset = 132, size = 12
		__GuiCallback_SubmitNucleusLogin__Delegate __GuiCallback_SubmitNucleusLogin__Delegate; //offset = 144, size = 12
		__GuiCallback_SubmitMessageBox__Delegate __GuiCallback_SubmitMessageBox__Delegate; //offset = 156, size = 12
		__GuiCallback_SubmitCreateNucleusAccount__Delegate __GuiCallback_SubmitCreateNucleusAccount__Delegate; //offset = 168, size = 12
		__GuiCallback_SubmitTermsOfService__Delegate __GuiCallback_SubmitTermsOfService__Delegate; //offset = 180, size = 12
		__GuiCallback_SubmitNucleusWelcomeMessage__Delegate __GuiCallback_SubmitNucleusWelcomeMessage__Delegate; //offset = 192, size = 12
		__GuiCallback_SubmitCerberusIntro__Delegate __GuiCallback_SubmitCerberusIntro__Delegate; //offset = 204, size = 12
		__GuiCallback_SubmitRedeemCode__Delegate __GuiCallback_SubmitRedeemCode__Delegate; //offset = 216, size = 12
		__GuiCallback_SubmitCerberusWelcomeMessage__Delegate __GuiCallback_SubmitCerberusWelcomeMessage__Delegate; //offset = 228, size = 12
		__GuiCallback_SubmitCreateNucleusAccountEx__Delegate __GuiCallback_SubmitCreateNucleusAccountEx__Delegate; //offset = 240, size = 12
		__GuiCallback_SubmitEmailPasswordMismatch__Delegate __GuiCallback_SubmitEmailPasswordMismatch__Delegate; //offset = 252, size = 12
		__GuiCallback_SubmitAccountDemographics__Delegate __GuiCallback_SubmitAccountDemographics__Delegate; //offset = 264, size = 12
		__GuiCallback_SubmitParentEmail__Delegate __GuiCallback_SubmitParentEmail__Delegate; //offset = 276, size = 12

		void Update( Float fDeltaT, ASParams stParam, Array<ASParams> lstParams );
		void EnterCode( String sDefault );
		void EnterPassword( String sDefault );
		void EnterEmail( String sDefault );
		void OnPanelRemoved();
		void OnPanelAdded();
		void HandleInputEvent( Byte Event, Float fValue, ASParams stParam, Array<ASParams> lstParams );
		void onExternalInitialize( ASParams stParam, Array<ASParams> lstParams );
		void ClearDelegates();
		void SubmitCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode, Bool bSubmit );
		void SubmitCerberusWelcomeMessage();
		void SubmitParentEmail( Bool bContinue, String ParentEmail );
		void SubmitAccountDemographics( Bool bContinue, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode );
		void SubmitRedeemCode( Bool bContinue, String i_sCode );
		void SubmitCerberusIntro( Byte eReturnCode );
		void SubmitNucleusWelcomeMessage();
		void SubmitTermsOfService( Bool bAccept );
		void SubmitCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bRegisterProduct, Bool bBioWareProducts, Bool bSubmit );
		void SubmitEmailPasswordMismatch( String Email, String Password, Byte eReturnCode );
		void SubmitMessageBox( Byte eReturnEnum );
		void SubmitNucleusLogin( String Email, String Password, Byte eReturnCode );
		void SubmitIntroPage( Bool bContinue );
		void GuiCallback_SubmitParentEmail( Bool bContinue, String ParentEmail );
		void GuiCallback_SubmitAccountDemographics( Bool bContinue, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode );
		void GuiCallback_SubmitEmailPasswordMismatch( String Email, String Password, Byte eReturnCode );
		void GuiCallback_SubmitCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode, Bool bSubmit );
		void GuiCallback_SubmitCerberusWelcomeMessage();
		void GuiCallback_SubmitRedeemCode( Bool bContinue, String i_sCode );
		void GuiCallback_SubmitCerberusIntro( Byte eReturnCode );
		void GuiCallback_SubmitNucleusWelcomeMessage();
		void GuiCallback_SubmitTermsOfService( Bool bAccept );
		void GuiCallback_SubmitCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bRegisterProduct, Bool bBioWareProducts, Bool bSubmit );
		void GuiCallback_SubmitMessageBox( Byte eReturnEnum );
		void GuiCallback_SubmitNucleusLogin( String Email, String Password, Byte eReturnCode );
		void GuiCallback_SubmitIntroPage( Bool bContinue );
		void ShowParentEmail();
		void ShowAccountDemographics( Array<String> m_CountryCodeList, Array<String> m_CountryDisplayList );
		void ShowEmailPasswordMismatch( String Email, String Password );
		void ShowCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode, Array<String> m_CountryCodeList, Array<String> m_CountryDisplayList );
		void ShowCerberusWelcomeMessage();
		void ShowRedeemCode();
		void ShowCerberusIntro();
		void ShowNucleusWelcomeMessage();
		void ShowTermsOfService( String i_sTermsOfService, Bool bTOSChanged );
		void ShowCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bRegisterProduct, Bool bBioWareProducts, Bool bUnderage );
		void ShowMessageBox( String sTitle, String sMessage, String sButton1Text, String sButton2Text, String sButton3Text );
		void ShowNucleusLogin( String Email, String Password, Int eScreenState );
		void ShowIntroPage();
	};

	const char* SF_9SLICE_SCALE_ERROR = 0.05;
	const char* STATUS_SuperRegen = 64;
	const char* STATUS_ActivePower = 32;
	const char* STATUS_MinimalDamage = 16;
	const char* STATUS_HeavyArmour = 8;
	const char* STATUS_HardenedShields = 4;
	const char* STATUS_Bleedout = 2;
	const char* STATUS_Barrier = 1;

	struct SFXHUDResistances
	{
		Bool bHasShield: 1; //offset = 0, size = 4
		Bool bHasArmour: 1; //offset = 0, size = 4
		Bool bHasBiotic: 1; //offset = 0, size = 4
		Bool bHasHealth: 1; //offset = 0, size = 4
		Float fHealthPct; //offset = 4, size = 4
		Float fArmourPct; //offset = 8, size = 4
		Float fBioticPct; //offset = 12, size = 4
		Float fShieldPct; //offset = 16, size = 4
	};

	struct SFXHUDTargetInfo
	{
		SFXHUDResistances Resistances; //offset = 0, size = 20
		String sName; //offset = 20, size = 12
		String sStatus; //offset = 32, size = 12
		Bool bInteractive: 1; //offset = 44, size = 4
		Bool bHostile: 1; //offset = 44, size = 4
		Bool bInRange: 1; //offset = 44, size = 4
		Int nStatusFlags; //offset = 48, size = 4
	};

	struct SFXHUDSquadMemberInfo
	{
		String sPath; //offset = 0, size = 12
		String sIconImagePath; //offset = 12, size = 12
		BioPawn* pPawn; //offset = 24, size = 4
		Texture2D* pIcon; //offset = 28, size = 4
		SFXHUDResistances Resistances; //offset = 32, size = 20
		SFXHUDResistances DisplayedResistances; //offset = 52, size = 20
		Float fCooldown; //offset = 72, size = 4
		Bool bCooldownVisible: 1; //offset = 76, size = 4
		String sShieldPath; //offset = 80, size = 12
		String sBioticPath; //offset = 92, size = 12
		String sArmourPath; //offset = 104, size = 12
		String sHealthPath; //offset = 116, size = 12
		String sPowerPath; //offset = 128, size = 12
		Bool bShieldVisible: 1; //offset = 140, size = 4
		Bool bBioticVisible: 1; //offset = 140, size = 4
		Bool bArmourVisible: 1; //offset = 140, size = 4
		Bool bHealthVisible: 1; //offset = 140, size = 4
		Bool bShieldDamage: 1; //offset = 140, size = 4
		Bool bBioticDamage: 1; //offset = 140, size = 4
		Bool bArmourDamage: 1; //offset = 140, size = 4
		Bool bHealthDamage: 1; //offset = 140, size = 4
		Bool bInvalidated: 1; //offset = 140, size = 4
		Bool bVisible: 1; //offset = 140, size = 4
		Bool bUpdateResistance: 1; //offset = 140, size = 4
		Bool bUpdateHealth: 1; //offset = 140, size = 4
		Bool bUpdatePower: 1; //offset = 140, size = 4
		Bool bUpdateIcon: 1; //offset = 140, size = 4
		Bool bDisplayVisible: 1; //offset = 140, size = 4
		Float fElapsedFullResistTime; //offset = 144, size = 4
	};

	struct SFXHudDmgIndicatorPaths
	{
		String _alpha; //offset = 0, size = 12
		String _visible; //offset = 12, size = 12
	};

	class SFXSFHandler_HUD: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_HUD, BioSFHandler, SFXGame )

	public:

		Actor* m_pCurrentTarget; //offset = 104, size = 4
		SFXHUDResistances m_CurrentResistances; //offset = 108, size = 20
		SFXHUDResistances m_ResistanceBarDisplayValues; //offset = 128, size = 20
		Int m_nCurrentBarCount; //offset = 148, size = 4
		Float m_fCurrentBarBackgroundX; //offset = 152, size = 4
		String m_sStatusText; //offset = 156, size = 12
		Bool m_bInteractive: 1; //offset = 168, size = 4
		Bool m_bInRange: 1; //offset = 168, size = 4
		Bool m_bTargetStatusVisible: 1; //offset = 168, size = 4
		Bool m_bInSquadCommandMode: 1; //offset = 168, size = 4
		Bool m_bWeaponVisible: 1; //offset = 168, size = 4
		Bool m_bWeaponOverheatBarVisible: 1; //offset = 168, size = 4
		Bool m_bHealthDisplayVisible: 1; //offset = 168, size = 4
		Bool m_bNotificationVisible: 1; //offset = 168, size = 4
		BioPlayerController* m_pPlayerController; //offset = 172, size = 4
		BioPlayerSquad* m_pPlayerSquad; //offset = 176, size = 4
		Array<SFXHudDmgIndicatorPaths> m_aDamageIndicatorPaths; //offset = 180, size = 12
		Array<Float> m_aDamageIndicatorAlphas; //offset = 192, size = 12
		SFXHUDSquadMemberInfo m_oShepardInfo; //offset = 204, size = 148
		SFXHUDSquadMemberInfo m_oHench1Info; //offset = 352, size = 148
		SFXHUDSquadMemberInfo m_oHench2Info; //offset = 500, size = 148
		Float m_fEffectivelyZero; //offset = 648, size = 4
		Int m_nCurrentWeaponIcon; //offset = 652, size = 4
		String m_nCurrentWeaponResource; //offset = 656, size = 12
		Int m_nCurrentWeaponSpareAmmo; //offset = 668, size = 4
		Int m_nCurrentClipAmmo; //offset = 672, size = 4
		Float m_fTimeSinceLastWeaponUpdate; //offset = 676, size = 4
		Actor* m_pCurrentDisplayTarget; //offset = 680, size = 4
		Float m_fSFWidth; //offset = 684, size = 4
		Float m_fCurrentOverheatValue; //offset = 688, size = 4
		Float m_fHealthBarCenterY; //offset = 692, size = 4
		Float m_fArmourBarCenterY; //offset = 696, size = 4
		Float m_fBioticBarCenterY; //offset = 700, size = 4
		Float m_fShieldBarCenterY; //offset = 704, size = 4
		Float m_fStatusInitialY; //offset = 708, size = 4
		Float m_fStatusTextHeight; //offset = 712, size = 4
		Float m_fButtonAInitialY; //offset = 716, size = 4
		Float m_fButtonAHeight; //offset = 720, size = 4
		String m_sTeamStatusStartFrame; //offset = 724, size = 12
		Float m_fSuperRegenThreshold; //offset = 736, size = 4
		Float m_fHealthShieldUpdateDelta; //offset = 740, size = 4
		Float m_fDamageIndicatorAlphaUpdateDelta; //offset = 744, size = 4
		Float m_fLowHealthWarning; //offset = 748, size = 4
		Float m_fWeaponUpdateInterval; //offset = 752, size = 4
		Float m_fBarAnimRate; //offset = 756, size = 4
		Float m_fFullStatFadeTime; //offset = 760, size = 4
		String m_sWeaponIconPath; //offset = 764, size = 12
		String m_sWeaponAmmoPath; //offset = 776, size = 12
		String m_sWeaponClipAmmoPath; //offset = 788, size = 12
		String m_sTargetNamePath; //offset = 800, size = 12
		String m_sTargetStatusPath; //offset = 812, size = 12
		String m_sButtonAPath; //offset = 824, size = 12
		String m_sTargetBackgroundPath; //offset = 836, size = 12
		String m_sHealthBarPath; //offset = 848, size = 12
		String m_sArmourBarPath; //offset = 860, size = 12
		String m_sBioticBarPath; //offset = 872, size = 12
		String m_sShieldBarPath; //offset = 884, size = 12
		String m_sResistBarOutlinePath; //offset = 896, size = 12
		String m_smcNotificationPath; //offset = 908, size = 12
		String m_sCenterStatusPath; //offset = 920, size = 12
		String m_sOverheatIndicatorPath; //offset = 932, size = 12
		String m_sOverheatIndicatorTextPath; //offset = 944, size = 12
		String m_sOverheatIndicatorTextFieldPath; //offset = 956, size = 12
		String m_sPlayerPowerPath1; //offset = 968, size = 12
		String m_sPlayerPowerPath2; //offset = 980, size = 12
		String m_sShields; //offset = 992, size = 12
		String m_sArmour; //offset = 1004, size = 12
		String m_sBarrier; //offset = 1016, size = 12
		String m_sHealth; //offset = 1028, size = 12
		String m_sOverheat; //offset = 1040, size = 12
		m_srStatusBarrierText m_srStatusBarrierText; //offset = 1052, size = 4
		m_srStatusBleedoutText m_srStatusBleedoutText; //offset = 1056, size = 4
		m_srStatusHardenedShieldsText m_srStatusHardenedShieldsText; //offset = 1060, size = 4
		m_srStatusHeavyArmourText m_srStatusHeavyArmourText; //offset = 1064, size = 4
		m_srStatusMinimalDamageText m_srStatusMinimalDamageText; //offset = 1068, size = 4
		m_srStatusSuperRegenText m_srStatusSuperRegenText; //offset = 1072, size = 4
		m_srShields m_srShields; //offset = 1076, size = 4
		m_srArmour m_srArmour; //offset = 1080, size = 4
		m_srBarrier m_srBarrier; //offset = 1084, size = 4
		m_srHealth m_srHealth; //offset = 1088, size = 4
		m_srOverheat m_srOverheat; //offset = 1092, size = 4
		m_srAmmoFull m_srAmmoFull; //offset = 1096, size = 4
		Float m_fNotificationDisplayTime; //offset = 1100, size = 4
		Float m_fNotificationElapsedTime; //offset = 1104, size = 4
		Int m_nNotificationFlourishId; //offset = 1108, size = 4
		__OnNotificationCompleted__Delegate __OnNotificationCompleted__Delegate; //offset = 1112, size = 12

		void PulseMessage();
		void PulseTextMessage( String sMessage );
		void PulseFullAmmoMessage();
		void OnNotificationComplete();
		Bool ShouldDisplayWeaponIcon(, Bool bDisplayWeaponIcon, BioPawn* pPawn );
		void UpdateWeaponDisplay( Bool bVisible, Weapon* pWeap, Bool bCheckWeaponOverheat, SFXWeapon* pSFXWeap, Int nAmmoInMagazine, Int nAmmoSpare, Int nOverheatPercent, Float fOverheatPct, Bool bShowOverheat, Bool bShowOverheatText, Bool bDisplayInvalidated );
		void UpdateResistanceDisplay( SFXHUDResistances oResistValues, Bool bBarsVisible );
		void UpdateTargetStatusDisplay( SFXHUDTargetInfo oTargetInfo, Bool bBarsVisible );
		void UpdateResistanceBarDisplay( Float fResistPercent, String sBarClipPath, Int nFrame );
		void UpdateTargetStatusVisibility( SFXHUDTargetInfo oTargetInfo, Bool bHaveHealth, Bool bHaveText );
		void SetTargetStatus( String sStatus, Bool bInteractive, Bool bInRange, Array<ASParams> aArgs );
		void SetTargetName( String sTargetName, Bool bHostile, Array<ASParams> aArgs );
		void SetOverheat( Float fOverheatPct, Bool bForce );
		void SetCenterStatus( String sText );
		String GetStatusText( BioPawn* pTarget, Int nStatusFlags, String sStatus, BioEpicPawnBehavior* pEPBehavior );
		Int GetTargetStatusFlags( Actor* pTarget, BioPawn* pBioPawnTarget, SFXShield_Base* pShieldObj, BioEpicPawnBehavior* pEPBehavior, Bool bShieldBoosted, Bool bShieldHardened, String sPowerText, Int nStatusFlags );
		void GetTargetHealthAndShields( Actor* pTarget, Float fHealthPct, Float fShieldsPct, SFXModule_Damage* pDamageMod, SFXShield_Base* pShieldObj, Float fShieldCurrent, Float fShieldMax, BioPawn* pBioPawnTarget );
		void GetResistances( Actor* pTarget, SFXHUDResistances oResistances, BioPawn* pBioPawnTarget, SFXShield_Base* pShield, SFXModule_Damage* pDamageMod, Float FMax, Float fCurrent, Float fShieldMax, Float fBioticMax, Float fArmourMax, Float fShieldCurrent, Float fBioticCurrent, Float fArmourCurrent );
		void UpdateCachedPositionData();
		void InitDisplay();
		void OnAspectRatioChanged();
		void GameSessionEnded();
		void CleanupReferences();
		void OnPanelRemoved();
		void OnNotificationOpenAnimComplete();
		void ClearNotification();
		void ShowNotification( Float nDisplayTime, Int nNumRemainingNotifications, Int nPriority, String sTitle, String sSubtitle, String sBody, Texture* oImage, Name nmAdditonalSound, Int nFlourishID );
		void OnNotificationCompleted();
	};

	enum Cerberus3DState
	{
		C3D_Default,
		C3D_RightPanel_Open,
		C3D_RightPanel_Closed,
	};

	enum MainMenuEntries
	{
		MM_ENTRY_DEFAULT,
		MM_ENTRY_NEWGAME,
		MM_ENTRY_NEWGAME_MALE,
		MM_ENTRY_NEWGAME_FEMALE,
		MM_ENTRY_LOADGAME,
		MM_ENTRY_EXTRAS,
		MM_ENTRY_ACHIEVEMENTS,
		MM_ENTRY_ALERT_DLC,
		MM_ENTRY_LIVECONTENT,
	};

	enum SFXDisplayableSquadCommands
	{
		SFX_DSC_READY,
		SFX_DSC_ATTACK,
		SFX_DSC_MOVETO,
	};

	enum BioTutorialPosition
	{
		BTP_Top,
		BTP_Bottom,
	};

	enum EGuiHandlers
	{
		GUI_HANDLER_NONE,
		GUI_HANDLER_INVENTORY,
		GUI_HANDLER_INGAMEGUI,
		GUI_HANDLER_CHARACTER_RECORD,
		GUI_HANDLER_LOOT,
		GUI_HANDLER_CONVERSATION,
		GUI_HANDLER_SHOP,
		GUI_HANDLER_GALAXYMAP,
		GUI_HANDLER_MAINMENU,
		GUI_HANDLER_NEW_CHARACTER,
		GUI_HANDLER_SELECT_CHARACTER,
		GUI_HANDLER_JOURNAL,
		GUI_HANDLER_HUD,
		GUI_HANDLER_PARTYSELECT,
		GUI_HANDLER_XMODS,
		GUI_HANDLER_SQUADCOMMAND,
		GUI_HANDLER_DATACODEX,
		GUI_HANDLER_SAVELOAD,
	};

	struct BioMessageBoxData
	{
		Name m_nmName; //offset = 0, size = 8
		Int m_nPriority; //offset = 8, size = 4
		Object* m_pCallbackObject; //offset = 12, size = 4
		Name m_nmCallbackFunction; //offset = 16, size = 8
		m_srMessage m_srMessage; //offset = 24, size = 4
		BioMessageBoxOptionalParams m_stParams; //offset = 28, size = 28
		Int m_nContext; //offset = 56, size = 4
	};

	class MassEffectGuiManager: public BioSFManager
	{
		DECLARE_PACKAGE_CLASS( MassEffectGuiManager, BioSFManager, SFXGame )

	public:

		SFXSFHandler_HUD* m_oSFHudHandler; //offset = 220, size = 4
		SFXSFHandler_Reticle* m_oSFReticleHandler; //offset = 224, size = 4
		SFXSFHandler_PowerWheel* m_oSFPowerWheelHandler; //offset = 228, size = 4
		BioSFHandler_DesignerUI* m_oDUIHandler; //offset = 232, size = 4
		BioSFHandler_BrowserWheel* m_oBWHandler; //offset = 236, size = 4
		SFXSFHandler_SavingDisplay* m_oSavingDisplayHandler; //offset = 240, size = 4
		Bool m_bSFHudCached: 1; //offset = 244, size = 4
		Bool m_bGameWasPaused: 1; //offset = 244, size = 4
		BioWorldInfo* oBioWorldInfo; //offset = 248, size = 4
		BioSFHandler_Conversation* m_oConversationHandler; //offset = 252, size = 4
		Name m_nmCurrentTutorial; //offset = 256, size = 8
		BioSFHandler_Specialization* oSpecializationHandler; //offset = 264, size = 4
		BioSFHandler_BlackScreen* m_oBlackScreenHandler; //offset = 268, size = 4
		BioSFResources* m_oSFResources; //offset = 272, size = 4
		WwiseAudioComponent* m_wwiseComponent; //offset = 276, size = 4
		Float m_fHintDisplayTimeRemaining; //offset = 280, size = 4
		BioSFHandler_MessageBox* m_oHintMsgBox; //offset = 284, size = 4
		BioSFHandler_MessageBox* m_oCachedHint; //offset = 288, size = 4
		BioSFHandler_MessageBox* m_oMessageBox; //offset = 292, size = 4
		GFxMovie* m_oCachedHintMovie; //offset = 296, size = 4
		Byte m_eLastBrowserWheelSubPage; //offset = 300, size = 1
		Bool bCoverWidgetDisplayed: 1; //offset = 304, size = 4
		Bool bClimbWidgetDisplayed: 1; //offset = 304, size = 4
		Bool bMantleWidgetDisplayed: 1; //offset = 304, size = 4
		Bool bGUIRequestedMouseVisiblityState: 1; //offset = 304, size = 4
		PlayerController* Player; //offset = 308, size = 4
		SFXAreaMapData* m_CurrentAreaMap; //offset = 312, size = 4
		Array<BioMessageBoxData> m_aMessageBoxQueue; //offset = 316, size = 12

		void UpdateMouseVisibilityState();
		Bool SetMouseVisibility( Object* pObject, Bool bShow );
		void DestroyPCRStore();
		SFXSFHandler_PRCShop* CreatePCRStore(, SFXSFHandler_PRCShop* oHandler, BioSFPanel* oPanel );
		Bool HideAreaMap(, BioPlayerController* oController, BioSFPanel* oPanel );
		Bool ShowAreaMap(, BioSFPanel* oPanel, BioPlayerController* oController, SFXAreaMapData* oMapData );
		SFXAreaMapData* GetAreaMapData();
		void SetAreaMapData( SFXAreaMapData* oMapData );
		BioPlayerController* GetBioPlayerController();
		PlayerController* GetPlayerController();
		void GUICMD( String sResultMessage, Name nmPanelTag, String sCmd, String sArg1, String sArg2, BioSFPanel* oPanel, Array<Byte> aCategories, Int I );
		void GUICMDStringToCategories( Array<Byte> categories, String sArg1, String sArg2 );
		void ForceSquadCommandFeedback( Byte Command, Int MemberIdx, Bool bCommandSuccess );
		SFXSFHandler_AreaMap* GetAreaMapHandler(, BioSFPanel* oPanel );
		BioSkillGame_Decryption_Handler* GetDecryptionHandler(, BioSFPanel* oPanel, BioSkillGame_Decryption_Handler* Handler, Int X );
		BioSFHandler_MainMenu* GetMainMenuHandler(, BioSFHandler_MainMenu* oMainMenu, Int X, BioSFPanel* oPanel );
		void HidePersonalizationGUI();
		void ShowPersonalizationGUI( BioSFPanel* oPanel );
		void SetDistanceOnSniperOverlay( Int nDistance, BioSFHandler_SniperOverlay* o_SniperOverlay, Int X, BioSFPanel* oPanel );
		void HideSniperOverlay();
		void ShowSniperOverlay();
		BioSFHandler_Conversation* GetConversationHandler();
		void GameSessionEnded();
		void CleanUp();
		Bool StopSound( Name nmSound );
		Bool PlaySound( Name nmSound );
		BioSFHandler_ChoiceGUI* CreateChoiceGUI( Name nmTag );
		BioSFHandler_MessageBox* CreateMessageBox();
		BioSFHandler_MessageBox* CreateHintBox();
		void UpdateHint( Float fDeltaT, BioSFHandler_MessageBox* oMsgBox );
		void DestroyNetworkGUI( Name HandlerId );
		SFXSFHandler_EANetworking* CreateNetworkGUI( Name HandlerId, SFXSFHandler_EANetworking* oHandler, BioSFPanel* oPanel );
		void RestoreHint();
		void HideHint();
		void CancelHint( BioPlayerController* PC );
		void ShowHint( srText srText, Float fDisplayTime, Int nIcon, Byte ePosition, Bool bCached );
		void ShowPlatformSpecificHint( srDefaultText srDefaultText, srPS3Text srPS3Text, srPCText srPCText, Float fDisplayTime, Byte ePosition, Bool bCached, srText srText, Bool bIsPS3, Bool bIsPC );
		BioSFHandler_BrowserWheel* GetBrowserHandler();
		BioSFHandler_DesignerUI* GetDUIHandler();
		SFXSFHandler_HUD* GetCachedHudHandler();
		void SetWheelState( Byte nPage, Byte nState );
		void HideClimbMantleWidget();
		void ShowClimbMantleWidget( Bool bMantle );
		void HideCoverWidget();
		void ShowCoverWidget();
		void OnPlayerDeath( BioSFPanel* oDUIPanel );
		void HideSkillGameBypass( BioPlayerController* PC, BioSFPanel* oSkillGamePanel );
		BioSkillGame_Bypass_Handler* ShowSkillGameBypass(, BioSFPanel* oPanel, BioPlayerController* PC );
		void HideSkillGameDecryption( BioPlayerController* PC, BioSFPanel* oSkillGamePanel );
		BioSkillGame_Decryption_Handler* ShowSkillGameDecryption(, BioSFPanel* oPanel, BioPlayerController* PC );
		void InterruptActiveSkillGame( BioSkillGame_Base_Handler* Handler, BioSFPanel* oSkillGamePanel, Array<Name> skillGameTags, Int I );
		void HideSkillGame( BioPlayerController* PC, BioWorldInfo* oBWorldInfo, BioSFPanel* oSkillGamePanel );
		BioSkillGame_Handler* ShowSkillGame(, BioSFPanel* oPanel, BioPlayerController* PC );
		Bool BlackScreenFadeFinished(, Bool bVal );
		void HideBlackScreen( Bool bWithFade );
		void ShowBlackScreen( Bool bWithFade );
		void HideGameOverGui( BioPlayerController* PC );
		void ShowGameOverGui( srGameOverString srGameOverString, BioSFPanel* oPanel, BioSFHandler_GameOver* oGameOver, BioPlayerController* PC );
		void HidePartySelect( BioPlayerController* PC );
		BioSFHandler_NewCharacter* LaunchCharacterCreation( Array<AnimSet*> a_AnimSets, Array<Class*> a_CharacterClasses, SFXMorphFaceFrontEndDataSource* a_MaleDataSource, SFXMorphFaceFrontEndDataSource* a_FemaleDataSource, BioSFPanel* oPanel, BioPlayerController* PC );
		BioSFHandler_NewCharacter* PlayCharacterCreation();
		BioSFHandler_Credits* PlayCredits(, BioSFPanel* oPanel, BioSFHandler_Credits* oCreditsHandler, BioPlayerController* PC );
		BioSFHandler_PartySelection* ShowPartySelect( Name nmForcedHenchman, BioSFPanel* oPanel, BioSFHandler_PartySelection* oPSHandler, BioPlayerController* PC );
		void HideSpecializationGui();
		Bool ShowSpecializationGUI( BioPawn* oPawn, Name nmPowerName, BioSFPanel* oPanel, Bool didSucceed );
		void HideGuiByTag( Name sTag, BioPlayerController* PC );
		void HideAchievementGui( BioPlayerController* PC );
		void ShowAchievementGui( BioSFPanel* oPanel, BioPlayerController* PC );
		void HideBrowserWheel( BioSFPanel* oCurrentPanel, BioPlayerController* PC, BioSFPanel* oDUIPanel );
		void ReturnToBrowserWheel( BioSFPanel* oCurrentPanel, Bool bExitImmediately, BioSFPanel* oBrowserPanel );
		void ShowBrowserWheel( BioPlayerController* PC );
		void CancelLeaderActive();
		void OnAllowCameraRotation( Bool i_bValue );
		void ReleaseHudCache();
		void RecreateHudPanel( BioSFPanel* oPanel, BioSFPanel* oReticlePanel, BioSFPanel* oWheelPanel );
		void HideConversationGui();
		void ShowConversationGui( Bool bIsSubtitle );
		void HackReloadMainMenu();
		BioSFHandler_MainMenu* ShowMainMenu( Byte eEntry, BioSFPanel* oPanel, BioSFHandler_MainMenu* oHandler, BioPlayerController* PC, Bool bWasCreated );
		Bool IsInSplashScreen(, BioSFPanel* Panel, BioSFHandler* Handler, BioSFHandler_Splash* SplashHandler );
		void ClearAllNonModalPanels( Int I, BioSFHandler_MessageBox* oMessageBox );
		void SetupBackground();
		void Update( Float fDeltaT );
		void QueuedMessageBoxCallback( Bool bAPressed, Int nContext );
		void HideQueuedMessageBoxes();
		void DisplayQueuedMessageBoxes();
		void RemoveNamedMessageBox( Name nmName );
		void QueueNamedMessageBox( Name nmName, Int nPriority, srMessage srMessage, BioMessageBoxOptionalParams stParams, pCallback pCallback, Int nContext );
	};

	const char* DisableMouseMovement = 9;
	const char* EnableMouseMovement = 8;
	const char* CloseScan = 7;
	const char* ClosePlanet = 6;
	const char* Scan = 5;
	const char* back = 4;
	const char* Select = 3;
	const char* Initialize = 2;
	const char* Close = 1;

	class BioSFHandler_GalaxyMap: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_GalaxyMap, BioSFHandler, SFXGame )

	public:

		Float m_fScrollValue; //offset = 104, size = 4
		Float m_fLeftStickX; //offset = 108, size = 4
		Float m_fLeftStickY; //offset = 112, size = 4
		Bool m_bClosingPlanet: 1; //offset = 116, size = 4
		Bool m_bClosingScan: 1; //offset = 116, size = 4
		Bool m_bWaitingForMsgBox: 1; //offset = 116, size = 4
		Bio2DA* m_pGalaxyMapImages2DA; //offset = 120, size = 4

		void BuyProbes();
		void BuyFuel();
		void HandleInputEvent( Byte nEvent, Float fValue, SFXGameModeManager* Manager, MassEffectGuiManager* GuiMan, BioPlayerController* PC, SFXGameModeOrbital* OrbitalGame );
		void CloseGalaxyMap();
		void UpdateInventoryDisplay( Int nResourceIndex, Int nAmount, ASParams stParam, Array<ASParams> lstParams );
		void UpdateScanResources( Array<Float> Resources, ASParams stParam, Array<ASParams> lstParams, Float Resource );
		void TravelConfirm( Bool bAPressed, Int nContext );
	};

	const char* ShowLoadScreen = 5;
	const char* QuitToMainMenu = 4;
	const char* LoadLastSave = 3;
	const char* InitializeGameOver = 1;

	class BioSFHandler_GameOver: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_GameOver, BioSFHandler, SFXGame )

	public:

		GameOverString GameOverString; //offset = 104, size = 4
		GameOverStringOverride GameOverStringOverride; //offset = 108, size = 4
		BadResumeGameText BadResumeGameText; //offset = 112, size = 4
		AcceptBadResumeGameText AcceptBadResumeGameText; //offset = 116, size = 4

		void GotoMainMenu();
		void OnPanelAdded();
		void HandleEvent( Byte nCommand, Array<String> lstArguments, ASParams stParam, Array<ASParams> lstParams, MassEffectGuiManager* GuiMan, SFXEngine* Engine, PlayerController* PC, SFXSFHandler_Load* Handler, BioSFPanel* NewPanel, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams Params );
		void Callback_GotoMainMenu( Bool bAPressed, Int Context );
	};

	struct GuiQuestInfo
	{
		Int nID; //offset = 0, size = 4
		Int nAdded; //offset = 4, size = 4
		String sName; //offset = 8, size = 12
		Bool bComplete: 1; //offset = 20, size = 4
		Bool bUpdated: 1; //offset = 20, size = 4
	};

	class BioSFHandler_Journal: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Journal, BioSFHandler, SFXGame )

	public:

		Array<GuiQuestInfo> lstQuests; //offset = 104, size = 12
		lstSortLabels lstSortLabels[3]; //offset = 116, size = 4
		lstSortTitles lstSortTitles[3]; //offset = 128, size = 4
		Bool m_bAnalogScroll: 1; //offset = 140, size = 4
		Float m_fRScrollValue; //offset = 144, size = 4
		srMarkAllCompleteMessage srMarkAllCompleteMessage; //offset = 148, size = 4
		srMarkAllCompleteMessageConfirm srMarkAllCompleteMessageConfirm; //offset = 152, size = 4
		srMarkAllCompleteMessageCancel srMarkAllCompleteMessageCancel; //offset = 156, size = 4

		void MarkAllQuestsViewed( Bool bAPressed, Int nContext );
		void Update( Float fDeltaT, ASParams stParam, Array<ASParams> lstParams );
		void HandleInputEvent( Byte Event, Float fValue );
	};

	enum Keyboard_Options
	{
		KEYBOARD_STANDARD,
		KEYBOARD_EMAIL,
		KEYBOARD_PASSWORD,
	};

	class BioSFHandler_Keyboard: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Keyboard, BioSFHandler, SFXGame )

	public:

		String sTitle; //offset = 104, size = 12
		String sDescription; //offset = 116, size = 12
		String sInputValue; //offset = 128, size = 12
		Bool bKeyboardVisible: 1; //offset = 140, size = 4
		Bool bKeyboardEntrySucceeded: 1; //offset = 140, size = 4

		void DisplayKeyboard( srTitle srTitle, srDescription srDescription, Byte nOptions, Int nMaxLength, String sDefault );
	};

	class BioSFHandler_LoadScreen: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_LoadScreen, BioSFHandler, SFXGame )

	public:

		void OnPanelAdded();
		void OnPanelRemoved();
		void HandleEvent( Byte nCommand, Array<String> lstArguments );
	};

	enum SFX_MB_TextAlign
	{
		SFX_MB_Centered,
		SFX_MB_Left,
	};

	enum SFX_MB_Skin
	{
		SFX_MB_Skin_User,
		SFX_MB_Skin_Shepard,
	};

	enum SFXGenericHintIcon
	{
		HINTICON_None,
	};

	enum SFXPCHintIcon
	{
		PCICON_None,
	};

	enum SFXPS3HintIcon
	{
		PS3ICON_None,
	};

	enum SFXXBoxHintIcon
	{
		XBICON_None,
		XBICON_XBOX_A,
		XBICON_XBOX_B,
		XBICON_XBOX_Y,
		XBICON_XBOX_X,
		XBICON_XBOX_Right_Thumb,
		XBICON_XBOX_Right_Thumb_Pressed,
		XBICON_XBOX_Right_Thumb_Released,
		XBICON_XBOX_Left_Thumb,
		XBICON_XBOX_Left_Thumb_Pressed,
		XBICON_XBOX_Left_Thumb_Released,
		XBICON_XBOX_Right_Thumb_Up,
		XBICON_XBOX_Right_Thumb_UpRight,
		XBICON_XBOX_Right_Thumb_Right,
		XBICON_XBOX_Right_Thumb_DownRight,
		XBICON_XBOX_Right_Thumb_Down,
		XBICON_XBOX_Right_Thumb_DownLeft,
		XBICON_XBOX_Right_Thumb_Left,
		XBICON_XBOX_Right_Thumb_UpLeft,
		XBICON_XBOX_Left_Thumb_Up,
	};

	enum SFXHintPosition
	{
		SFXHINTPOS_Top,
		SFXHINTPOS_Middle,
	};

	enum BioMessageBoxIconSets
	{
		ICONSET_None,
		ICONSET_Manufacturer,
		ICONSET_Combat,
	};

	struct BioMessageBoxOptionalParams
	{
		srAText srAText; //offset = 0, size = 4
		srBText srBText; //offset = 4, size = 4
		Bool bNoFade: 1; //offset = 8, size = 4
		Byte nIconSet; //offset = 12, size = 1
		Int nIconIndex; //offset = 16, size = 4
		Bool bModal: 1; //offset = 20, size = 4
		Bool bForcePlayersOnly: 1; //offset = 20, size = 4
		Byte m_SkinType; //offset = 24, size = 1
		Byte m_TextAlign; //offset = 25, size = 1
	};

	class BioSFHandler_MessageBox: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_MessageBox, BioSFHandler, SFXGame )

	public:

		Int nInputCallbackContext; //offset = 104, size = 4
		Bool bHandleInput: 1; //offset = 108, size = 4
		BioSFManager* m_oBackupSFMgr; //offset = 112, size = 4
		Bool bShowMouse: 1; //offset = 116, size = 4
		Bool m_bIsModal: 1; //offset = 116, size = 4
		Bool m_bForcePlayersOnly: 1; //offset = 116, size = 4
		Bool m_bInitialPlayersOnly: 1; //offset = 116, size = 4
		Bool m_bCached: 1; //offset = 116, size = 4
		Int m_nHiddenDepth; //offset = 120, size = 4
		Float m_fRScrollValue; //offset = 124, size = 4
		__InputCallback__Delegate __InputCallback__Delegate; //offset = 128, size = 12
		__UpdateCallback__Delegate __UpdateCallback__Delegate; //offset = 140, size = 12
		__UpdateCallbackEx__Delegate __UpdateCallbackEx__Delegate; //offset = 152, size = 12

		void HandleInputEvent( Byte Event, Float fValue );
		void OnPanelAdded();
		void DisplayHintMessage( srMessage srMessage, Int nIcon, Byte ePosition, Array<ASParams> aParams );
		void HideMessageBox( Bool bRemove, Bool bSkipFade );
		void DisplayQuickMessageBoxEx( String sMessage, BioMessageBoxOptionalParams stParams );
		void DisplayQuickMessageBox( srMessage srMessage, BioMessageBoxOptionalParams stParams );
		void DisplayMessageBoxEx( String sMessage, BioMessageBoxOptionalParams stParams );
		void DisplayMessageBox( srMessage srMessage, BioMessageBoxOptionalParams stParams );
		void SetUpdateDelegate( pDelegate pDelegate );
		void SetInputDelegate( pDelegate pDelegate, Int nContext );
		void UpdateCallbackEx( Float fDeltaT, Object* oMsgBox );
		void UpdateCallback( Float fDeltaT, BioSFHandler_MessageBox* oMsgBox );
		void InputCallback( Bool bAPressed, Int nContext );
	};

	const char* ShowLoadGuiForME2Import = 18;
	const char* OpenMarketPlace = 17;
	const char* CerberusDLCAvailable = 16;
	const char* StartNewGameFemale = 15;
	const char* CerberusStateExecuteAction = 14;
	const char* ShowLoadGuiForImport = 13;
	const char* ExitGame = 10;
	const char* ShowOptions = 9;
	const char* ShowLiveContent = 8;
	const char* ShowLoadGui = 6;
	const char* ResumeGame = 5;
	const char* InitializeMainMenu = 4;
	const char* ShowCredits = 3;
	const char* ShowHonors = 2;
	const char* StartNewGame = 1;

	class BioSFHandler_MainMenu: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_MainMenu, BioSFHandler, SFXGame )

	public:

		srPRCAvailableMessage srPRCAvailableMessage; //offset = 104, size = 4
		Float fPCRMessageDispTime; //offset = 108, size = 4
		Bool bDisplayForNewContentOnly: 1; //offset = 112, size = 4
		Bool bUseCerberusBackGroundForSubScreens: 1; //offset = 112, size = 4
		Byte nSelectedEntry; //offset = 116, size = 1
		Byte nCurrent3DState; //offset = 117, size = 1
		Byte PendingCommand; //offset = 118, size = 1
		SFXOnlineComponentUI* m_BlazeUI; //offset = 120, size = 4
		Bool m_bIsConnecting: 1; //offset = 124, size = 4
		Byte m_CerbConnectState; //offset = 128, size = 1
		SFXSFHandler_PRCShop* m_PCRStore; //offset = 132, size = 4
		NoLoginStart NoLoginStart; //offset = 136, size = 4
		ConfirmNoLoginStart ConfirmNoLoginStart; //offset = 140, size = 4
		CancelNoLoginStart CancelNoLoginStart; //offset = 144, size = 4
		LostNetworkConnection LostNetworkConnection; //offset = 148, size = 4
		ConfirmNetworkLoss ConfirmNetworkLoss; //offset = 152, size = 4
		Calander_Title Calander_Title; //offset = 156, size = 4
		MOTD_Title MOTD_Title; //offset = 160, size = 4
		UPCOMING_DLC_Title UPCOMING_DLC_Title; //offset = 164, size = 4
		AVAIL_DLC_Title AVAIL_DLC_Title; //offset = 168, size = 4
		UPCOMING_CERB_DLC_Title UPCOMING_CERB_DLC_Title; //offset = 172, size = 4
		AVAIL_CERB_DLC_Title AVAIL_CERB_DLC_Title; //offset = 176, size = 4
		srCerb_ActivateCerb srCerb_ActivateCerb; //offset = 180, size = 4
		srCerb_ConnectTo srCerb_ConnectTo; //offset = 184, size = 4
		srCerb_ConnectingToCerb srCerb_ConnectingToCerb; //offset = 188, size = 4
		srCerb_ConnectedToCerb srCerb_ConnectedToCerb; //offset = 192, size = 4
		srPRCStore_DescFormat srPRCStore_DescFormat; //offset = 196, size = 4
		srPRCStore_PurchasedYes srPRCStore_PurchasedYes; //offset = 200, size = 4
		srPRCStore_PurchasedNo srPRCStore_PurchasedNo; //offset = 204, size = 4
		srPRCStore_Title srPRCStore_Title; //offset = 208, size = 4
		srPRCStore_Subtitle srPRCStore_Subtitle; //offset = 212, size = 4
		srPRCStore_ABtn srPRCStore_ABtn; //offset = 216, size = 4
		srPRCStore_BBtn srPRCStore_BBtn; //offset = 220, size = 4
		srExitConfirm srExitConfirm; //offset = 224, size = 4
		srConfirm srConfirm; //offset = 228, size = 4
		srCancel srCancel; //offset = 232, size = 4
		ConfirmImportME1 ConfirmImportME1; //offset = 236, size = 4

		String GetLocalizedNewsItemCount( Int nCurrent, Int nTotal );
		void OnInputFocusRecieved();
		void RefreshCerberusState( SFXGame* oGame, SFXOnlineSubsystem* oOnline, SFXOnlineComponentBlazeLogin* oLogin, BioWorldInfo* oBioWorldInfo, Byte eConnectionState );
		void PRCStoreGUIInputPressed( Bool bAPressed, Int nContext, SFXGameChoiceGUIData_PRCShop* oData, Array<Int> aChoices );
		void AddPRCChoices( SFXGameChoiceGUIData_PRCShop* oData, Array<SFXOfferDescriptor> aOffers, SFXChoiceEntryNoStrRef ChoiceParams, SFXOfferDescriptor oOffer, Int nIndex, String sFinalDescription, srYesNo srYesNo );
		void OpenMarketplaceGui( Array<SFXOfferDescriptor> aOffers );
		void Buy( Byte nSource, SFXGame* oGame, SFXOnlineSubsystem* oOnline, SFXOnlineComponentBlazeLogin* oLogin, BioWorldInfo* oBioWorldInfo );
		void OnExecuteOpenMarketPlace();
		void OnExecuteCerberusDLCAvailable();
		void HasCerberusDLC( Bool bVal, ASParams stParam, Array<ASParams> lstParams );
		void CerberusScreenStateChange( Byte eNewState, ASParams stParam, Array<ASParams> lstParams );
		void SetCerberusConnectState( Bool bHasAction, String sMessage, Bool bAltView, Bool bVisible, ASParams stParam, Array<ASParams> lstParams );
		void CerberusConnect( Byte connectMode, SFXSFHandler_EANetworking* oHandler, MassEffectGuiManager* oManager );
		void SetOnlineState( Byte eState, Bool bHasAction, Bool bIsVisible, Bool bAltView, String sMessage );
		void SetMarqueeRepeatText( String MessageData, ASParams stParam, Array<ASParams> lstParams );
		void OnDisplayNotification( Byte Type, String MessageData, String Title, String Image );
		void CloseEANetworking( MassEffectGuiManager* oManager );
		void ClearNotifications();
		void AddCerberusItem( String i_sTitle, String i_sInfo, String i_sImage, ASParams stParam, Array<ASParams> lstParams );
		void PrevCerberusItem();
		void NextCerberusItem();
		void InitCerberus( SFXGame* oGame, SFXOnlineSubsystem* oOnline, BioWorldInfo* oBioWorldInfo );
		void SetupMainMenu( SFXEngine* Engine, BioPlayerController* PC, LocalPlayer* LP, ASParams stParam, Array<ASParams> lstParams );
		void NotifyLinkStatusChange( Bool bIsConnected );
		void OnPanelRemoved( OnlineSubsystem* OnlineSub, SystemInterface SystemInterface );
		void OnPanelAdded( OnlineSubsystem* OnlineSub, SystemInterface SystemInterface );
		void SetEnabledAndVisible( Bool bVal );
		void MoveToLoadGui( Byte LoadMode, SFXSFHandler_Load* oLGHandler, BioSFPanel* oNewPanel );
		Bool CheckLogin(, PlayerController* PC, Int ControllerId, OnlineSubsystem* OnlineSub, PlayerInt PlayerInt, SFXEngine* Engine, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams Params );
		Bool IsReadyForLegacyImport(, PlayerController* PC, Int ControllerId, OnlineSubsystem* OnlineSub, PlayerInt PlayerInt );
		void Callback_ImportME1Prompt( Bool bAPressed, Int Context, PlayerController* PC, SFXEngine* Engine );
		void Callback_NoLoginStart( Bool bAPressed, Int Context, PlayerController* PC, SFXEngine* Engine, Array<String> Empty );
		void ExitConfirm( Bool bAPressed, Int nContext );
		void HandleEvent( Byte nCommand, Array<String> lstArguments, BioSFHandler_Options* oOptions, BioSFHandler_Credits* oCredits, BioSFHandler_Achievement* oAchievement, BioSFPanel* oNewPanel, SFXEngine* Engine, BioSFHandler_MessageBox* oMsgBox, BioMessageBoxOptionalParams stParams, MassEffectGuiManager* oManager );
	};

	const char* MAX_CLASS_CHOICES = 6;
	const char* SelectStorageDevice = 24;
	const char* SetCode = 21;
	const char* ShowCodeKeyboard = 20;
	const char* UpdateBonusTalents = 18;
	const char* Set3DModelState = 17;
	const char* ResetCategory = 16;
	const char* ZoomOutFromFace = 15;
	const char* ZoomInOnFace = 14;
	const char* Show3DModel = 13;
	const char* StartCustom = 12;
	const char* Hide3DModel = 11;
	const char* SelectPreviousChar = 10;
	const char* ClassChange = 9;
	const char* ConfirmCharCreate = 8;
	const char* ShowNameKeyboard = 7;
	const char* ExitNewCharacter = 6;
	const char* StartGameWithCustom = 5;
	const char* InitializeNC = 4;
	const char* StartGameWithIconic = 3;
	const char* SliderValueChanged = 2;
	const char* NextGeneratedHead = 1;

	enum NewCharacterLookAtTarget
	{
		NCLAT_Ahead,
		NCLAT_Left,
		NCLAT_Right,
	};

	enum BioNewCharacterTemplates
	{
		BNCT_ICONIC,
		BNCT_CUSTOM,
	};

	enum EDataOrigin
	{
		DataOrigin_NewGame,
		DataOrigin_ME1,
	};

	struct BonusTalentData
	{
		String PowerClassName; //offset = 0, size = 12
		Int AchievementId; //offset = 12, size = 4
		srChoiceName srChoiceName; //offset = 16, size = 4
		srChoiceTitle srChoiceTitle; //offset = 20, size = 4
		Texture2D* oChoiceImage; //offset = 24, size = 4
		srChoiceDescription srChoiceDescription; //offset = 28, size = 4
		Bool bMorinthSpecialCase: 1; //offset = 32, size = 4
	};

	class BioSFHandler_NewCharacter: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_NewCharacter, BioSFHandler, SFXGame )

	public:

		Float fLookAtUpDownValue; //offset = 104, size = 4
		Float fLookAtLeftRightValue; //offset = 108, size = 4
		Bool bLookAtLeftRightNulling: 1; //offset = 112, size = 4
		Bool bLookAtUpDownNulling: 1; //offset = 112, size = 4
		Bool bZoomedInOnFace: 1; //offset = 112, size = 4
		Bool bOpenedFromMainMenu: 1; //offset = 112, size = 4
		Bool bImportingCharacter: 1; //offset = 112, size = 4
		Bool m_bMaleSelected: 1; //offset = 112, size = 4
		String sStartMap; //offset = 116, size = 12
		srCustomMaleName srCustomMaleName; //offset = 128, size = 4
		srCustomFemaleName srCustomFemaleName; //offset = 132, size = 4
		srNewCharConfirm srNewCharConfirm; //offset = 136, size = 4
		srNewCharCancel srNewCharCancel; //offset = 140, size = 4
		srNewCharQuestion srNewCharQuestion; //offset = 144, size = 4
		srFacialCategoryDescription srFacialCategoryDescription; //offset = 148, size = 4
		srConfirm srConfirm; //offset = 152, size = 4
		Name m_nmAllianceComputerPleaseLogin; //offset = 156, size = 8
		String m_sMaleName; //offset = 164, size = 12
		String m_sFemaleName; //offset = 176, size = 12
		Byte m_nDataOrigin; //offset = 188, size = 1
		Byte m_nCurrentTemplate; //offset = 189, size = 1
		Byte m_nLastInitializedTemplate; //offset = 190, size = 1
		Byte CurrentLookAtTarget; //offset = 191, size = 1
		Byte NextLookAtTarget; //offset = 192, size = 1
		Int m_nDefaultOrigin; //offset = 196, size = 4
		Int m_nDefaultNotoriety; //offset = 200, size = 4
		Int m_nDefaultClass; //offset = 204, size = 4
		srNameTitle srNameTitle; //offset = 208, size = 4
		Int nMaxNameLength; //offset = 212, size = 4
		srCodeTitle srCodeTitle; //offset = 216, size = 4
		Int nMaxCodeLength; //offset = 220, size = 4
		Int m_nInfoScrollSpeed; //offset = 224, size = 4
		String m_sCode; //offset = 228, size = 12
		Bool m_bEnteringCode: 1; //offset = 240, size = 4
		Bool m_bStopScroll: 1; //offset = 240, size = 4
		NoSaveDevice NoSaveDevice; //offset = 244, size = 4
		ConfirmSelectDevice ConfirmSelectDevice; //offset = 248, size = 4
		CancelSelectDevice CancelSelectDevice; //offset = 252, size = 4
		Name m_nmClassAnimSet; //offset = 256, size = 8
		Array<AnimSet*> lstClassAnimSetRefs; //offset = 264, size = 12
		Array<Class*> lstCharacterClasses; //offset = 276, size = 12
		Array<Class*> lstSpawnableClasses; //offset = 288, size = 12
		SFXMorphFaceFrontEndDataSource* MaleDataSource; //offset = 300, size = 4
		SFXMorphFaceFrontEndDataSource* FemaleDataSource; //offset = 304, size = 4
		BioPawn* lstTemplates[3]; //offset = 308, size = 4
		Name lstTemplateNames[3]; //offset = 320, size = 8
		Name lstStoredVarNames[3]; //offset = 344, size = 8
		BioVFXTemplate* SchematicVisualEffect; //offset = 368, size = 4
		AnimSet* SchematicAnimSet; //offset = 372, size = 4
		BioSFHandler_Keyboard* oKeyboard; //offset = 376, size = 4
		BioMorphFaceFrontEnd* m_oBioMorphFrontEnd; //offset = 380, size = 4
		Name lstCurrentClass[3]; //offset = 384, size = 8
		Array<BonusTalentData> BonusTalents; //offset = 408, size = 12
		Array<BonusTalentData> UnlockedBonusTalents; //offset = 420, size = 12
		Int CurrentPregeneratedHeadIndex; //offset = 432, size = 4
		Array<String> MalePregeneratedHeadCodes; //offset = 436, size = 12
		Array<String> FemalePregeneratedHeadCodes; //offset = 448, size = 12
		__OnCloseCallback__Delegate __OnCloseCallback__Delegate; //offset = 460, size = 12

		void UpdateLookAtTarget( Name LookAtTarget );
		void Callback_NoDevice( Bool bAPressed, Int Context, PlayerController* PC, SFXEngine* Engine );
		void OnDeviceSelectionComplete( Bool bWasSuccessful, OnlineSubsystem* OnlineSub, PlayerIntEx PlayerIntEx, PlayerController* PC, SFXEngine* Engine, Int ControllerId, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams Params, Int DeviceID, String DeviceName, SoldierStringRef SoldierStringRef );
		void ChooseStorageDevice( PlayerController* PC, OnlineSubsystem* OnlineSub, PlayerIntEx PlayerIntEx, Int ControllerId );
		void ProcessExternalStates( BioWorldInfo* BWI, BioPlayerController* PC, SFXEngine* Engine, PlayerSaveRecord PlayerRecord );
		void TriggerClassOverlay();
		void SelectPreviousPregeneratedHead( Int NumPregeneratedHeads );
		void SelectNextPregeneratedHead( Int NumPregeneratedHeads );
		void ConfirmButtonPressed( Bool bAPressed, Int nContext, ASParams stParam, Array<ASParams> lstParams );
		void ConfirmComplete( BioSFHandler_MessageBox* oMsgBox, BioMessageBoxOptionalParams stParams );
		void ClearModels( Int I );
		void OnPanelRemoved();
		void OnPanelAdded( ASParams stParam, Array<ASParams> lstParams );
		void PopulateCustomFaceList( Int I, Int J, Int nNumCategories, Int nNumSliders, ASParams stParam, Array<ASParams> lstCategoryParams, Array<ASParams> lstSliderParams );
		void HandleSliderChange( Int nCategory, Int nSlider, Int nValue, BioWorldInfo* oBWI );
		void DoCategoryReset( Int nCategory, BioWorldInfo* oBWI );
		void SetSliderPositions( ASParams stParam, Array<ASParams> lstParams, Int nNumCategories, Int nNumSliders, Int I, Int J );
		void SetCustomModel( BioWorldInfo* oBWI, Bool bForceFullReset );
		void Update3DModel( Byte nTemplate, BioWorldInfo* oBWI );
		void Update3DModelState( Byte nTemplate );
		void StartNewGameEx( SeqEvent_RemoteEvent* reStartNewGame );
		void StartNewGame( PlayerInfoEx NewPlayer, BioSaveGame* CurrentGame, PlayerController* PC, SFXPawn_Player* oPlayerPawn, SFXEngine* Engine, Class* CharacterClass );
		void RefitBonusTalent( String BonusTalent, Int idx, SFXPower* Power, PlayerController* PC, BioPawn* ResultPawn, Bool bLastBonusHadRanks, Int Rank1Cost, Int Refund, Float Rank, Bool bHadBonusPower );
		void GetAllUnlockedBonusTalentInfo( Array<BonusTalentData> aUnlockedBonusTalentInfo, BonusTalentData UnlockableTalent, SFXProfileSettings* Profile, BioPlayerController* PC );
		void UpdateBonusTalentList( Int I, ASParams CurrentParameter, Array<ASParams> Parameters );
		void SetPlayerCharacter( Array<String> PlayerSettings, BioPawn* Pawn, BioMorphFace* MorphHead, BioSaveGame* CurrentGame );
		void SetupIconicCharacter( Array<String> lstSettings, BioSaveGame* CurrentGame );
		void UpdateCustomClassChoice( Class* PlayerClass, Int Row, ASParams CurrentParameter, Array<ASParams> Parameters );
		void UpdateCustomClassList( ASParams CurrentParameter, Array<ASParams> Parameters, Int nClassIdx );
		void UpdatePreviousCharacterList();
		void SetupSummary( ASParams stParam, Array<ASParams> lstParams );
		void SetCustomName( String sMaleName, String sFemaleName, ASParams stParam, Array<ASParams> lstParams, String sConfirmNameString );
		void UpdateCode( Int nNumCategories, Int nNumSliders, Int I, Int J, Int nIndex, Int nValue, ASParams stParam, Array<ASParams> lstParams );
		void ApplyNewCode( String sInputCode, Int nNumCategories, Int nNumSliders, Int I, Int J, Int nIndex, Int nValue, BioWorldInfo* oBWI );
		void Update( Float fDeltaT, PlayerController* PC, Int ControllerId, Bool bCanWriteSave );
		void ResetLookAt();
		void HandleLookAtLeftRight( Float fValue, Float LookThreshold );
		void HandleLookAtUpDown( Float fValue, Float LookThreshold );
		void HandleRotate( Float fValue );
		void ScrollText( Float fValue, Array<ASParams> lstParams, ASParams aParam );
		void HandleInputEvent( Byte Event, Float fValue );
		void SetUIPawnCasual( Bool bCasual, BioWorldInfo* oWI, BioPlayerController* PC, SFXPawn_Player* oPlayerPawn );
		void HandleEvent( Byte nCommand, Array<String> lstArguments, BioSFPanel* oNewPanel, Name nmNewClass, PlayerController* PC );
		void SetBackgroundMaterial( MaterialInterface* Material, BioUIWorld* oUIWorld );
		void SetSchematicResources( BioVFXTemplate* in_SchematicEffectTemplate, AnimSet* in_SchematicAnimSet, BioUIWorld* oUIWorld );
		void SetClassVFXTemplates( BioVFXTemplate* FullBioticEffectTemplate, BioVFXTemplate* HalfBioticEffectTemplate, BioVFXTemplate* TechToolEffectTemplate, BioUIWorld* oUIWorld );
		void AddKismetNamedObject( Name KismetVariableName, Object* ObjectValue, BioUIWorld* oUIWorld );
		void SetMaleSelected( Bool bSelected, BioUIWorld* oUIWorld );
		Class* GetCharacterClassByName( Name nmClass, Class* CharClass, Int nClassIdx );
		void ClearEffects();
		void Update3DModelByClass( Name nmClass, BioPawn* pTemplate, Byte nTemplate, Bool bUpdate, Bool bForce, Bool bAttachVFXandUpdatePose );
		void Setup3DModel();
		void SetOnCloseCallback( fn_OnCloseDelegate fn_OnCloseDelegate );
		void OnCloseCallback();
	};

	const char* Option_ConfirmCancelExit = 6;
	const char* Option_SaveAndExit = 5;
	const char* Option_SetOption = 4;
	const char* Option_Initialize = 3;
	const char* Option_ResetDefaults = 2;
	const char* Option_Close = 1;

	enum EOptionsGuiMode
	{
		GuiMode_BrowserWheel,
		GuiMode_MainMenu,
	};

	class BioSFHandler_Options: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Options, BioSFHandler, SFXGame )

	public:

		Byte GuiMode; //offset = 104, size = 1
		Bool m_bSelfPanelClose: 1; //offset = 108, size = 4
		Bool bWaitingOnMsgBox: 1; //offset = 108, size = 4
		Array<Int> m_lstOptsToReset; //offset = 112, size = 12
		ResetToDefaultsText ResetToDefaultsText; //offset = 124, size = 4
		ConfirmResetToDefaultsText ConfirmResetToDefaultsText; //offset = 128, size = 4
		CancelResetToDefaultsText CancelResetToDefaultsText; //offset = 132, size = 4
		ExitConfirmText ExitConfirmText; //offset = 136, size = 4
		ConfirmExitFromMenuText ConfirmExitFromMenuText; //offset = 140, size = 4
		CancelExitFromMenuText CancelExitFromMenuText; //offset = 144, size = 4
		SFXProfileSettings* NewSettings; //offset = 148, size = 4
		srSkipConfirm srSkipConfirm; //offset = 152, size = 4
		srYes srYes; //offset = 156, size = 4
		srNo srNo; //offset = 160, size = 4
		__OnCloseCallback__Delegate __OnCloseCallback__Delegate; //offset = 164, size = 12

		void OnPanelAdded();
		void CloseGui( MassEffectGuiManager* GuiMan );
		void UpdateAudioVolumeSettings( SFXProfileSettings* ReadFrom );
		void UpdateDisplayGamma( SFXProfileSettings* ReadFrom );
		void GetProfileSettingsForOptions( Array<Byte> lstProfSettings, Array<Int> lstTypes );
		Byte GetProfileSettingForOption( Int Type );
		void SetOption( Int Type, Int Value );
		void SetOptionsOnGUI( SFXProfileSettings* Settings );
		void CopyProfileSettings( SFXProfileSettings* Source, SFXProfileSettings* Dest );
		void Callback_ExitFromMenu( Bool bAPressed, Int Context );
		void Callback_ResetToDefaults( Bool bAPressed, Int Context, BioPlayerController* PC, Array<Byte> lstProfileSettings );
		void onExIntResetToDefaults( String sPackedIDs, MassEffectGuiManager* GuiMan );
		void Helper_ExtractPackedOptIDs( Array<Int> lstOptIDs, String sPackedIDs, Int I, Array<String> lstStringParts );
		void Helper_CreateResetConfirmPopup( MassEffectGuiManager* GuiMan, pInputDelegate pInputDelegate, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams Params );
		void HandleEvent( Byte Command, Array<String> lstArguments, MassEffectGuiManager* GuiMan, BioPlayerController* PC );
		void SetOnCloseCallback( fn_OnCloseDelegate fn_OnCloseDelegate );
		void OnCloseCallback();
	};

	class BioSFHandler_PCDesignerUI: public BioSFHandler_DesignerUI
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCDesignerUI, BioSFHandler_DesignerUI, SFXGame )

	public:
	};

	class BioSFHandler_PCGalaxyMap: public BioSFHandler_GalaxyMap
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCGalaxyMap, BioSFHandler_GalaxyMap, SFXGame )

	public:

		Bool bMoveToMouse: 1; //offset = 124, size = 4
		Bool bMouseMovementEnabled: 1; //offset = 124, size = 4

		void BuyProbes( SFXGameModeManager* Manager, MassEffectGuiManager* GuiMan, BioPlayerController* PC, SFXGameModeGalaxy* GalaxyMap );
		void EndRefuelNoise( SFXGameModeManager* Manager, MassEffectGuiManager* GuiMan, BioPlayerController* PC, SFXGameModeGalaxy* GalaxyMap );
		void RepeatBuyFuel( SFXGameModeManager* Manager, MassEffectGuiManager* GuiMan, BioPlayerController* PC, SFXGameModeGalaxy* GalaxyMap );
		void BuyFuel( SFXGameModeManager* Manager, MassEffectGuiManager* GuiMan, BioPlayerController* PC, SFXGameModeGalaxy* GalaxyMap );
		void HandleInputEvent( Byte nEvent, Float fValue, SFXGameModeManager* Manager, MassEffectGuiManager* GuiMan, BioPlayerController* PC, SFXGameModeOrbital* OrbitalGame, BioCameraBehaviorGalaxy* GalaxyCam );
	};

	class BioSFHandler_PCMainMenu: public BioSFHandler_MainMenu
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCMainMenu, BioSFHandler_MainMenu, SFXGame )

	public:

		void OnYButton();
	};

	class BioSFHandler_PCMessageBox: public BioSFHandler_MessageBox
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCMessageBox, BioSFHandler_MessageBox, SFXGame )

	public:
	};

	const char* CONST_PasteCode = 23;
	const char* CONST_CopyCode = 22;
	const char* CONST_SetCustomName = 19;

	class BioSFHandler_PCNewCharacter: public BioSFHandler_NewCharacter
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCNewCharacter, BioSFHandler_NewCharacter, SFXGame )

	public:

		Bool bHeadLookEnabled: 1; //offset = 472, size = 4
		Float fScrollValueMouse; //offset = 476, size = 4
		Float fLookAtThresholdAhead; //offset = 480, size = 4
		Float fLookAtThreshold; //offset = 484, size = 4
		Float fLookAtLimit; //offset = 488, size = 4

		void UpdateLookAtTarget( Float LookThreshold );
		void Update( Float fDeltaT );
		void HandleLookAtLeftRight( Float fValue );
		void HandleLookAtUpDown( Float fValue );
		void HandleLookAtLeftRightMouse( Float fValue );
		void HandleLookAtUpDownMouse( Float fValue );
		void HandleInputEvent( Byte Event, Float fValue, ASParams stParam, Array<ASParams> lstParams );
		void HandleEvent( Byte nCommand, Array<String> lstArguments, String szName );
		String ClipboardPaste();
		void ClipboardCopy( String sString );
	};

	const char* PCOptions_MaxNumKeysPerAlias = 2;
	const char* Option_ApplySettings = 9;
	const char* Option_ApplyPCBindings = 8;
	const char* Option_ResetPCBindings = 7;

	struct NonBindableKeyDefinition
	{
		Name Name; //offset = 0, size = 8
		String Command; //offset = 8, size = 12
		Bool Control: 1; //offset = 20, size = 4
		Bool Shift: 1; //offset = 20, size = 4
		Bool Alt: 1; //offset = 20, size = 4
		Bool ModifierIndependent: 1; //offset = 20, size = 4
	};

	struct SubordinateDesc
	{
		Bool bAllGameModes: 1; //offset = 16, size = 4
	};

	struct GuiBind
	{
		Name Name; //offset = 16, size = 4
		Bool bCategory: 1; //offset = 20, size = 4
		KeyBind Keys[2]; //offset = 24, size = 24
		String KeysLocName[2]; //offset = 72, size = 12
		Array<SubordinateDesc> Subordinates; //offset = 96, size = 12
	};

	struct ModeAliasPair
	{
		String Alias; //offset = 0, size = 12
		Byte GameMode; //offset = 12, size = 1
	};

	class BioSFHandler_PCOptions: public BioSFHandler_Options
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCOptions, BioSFHandler_Options, SFXGame )

	public:

		Array<KeyBind> KeyBinds; //offset = 176, size = 12
		KeyHasBeenBound KeyHasBeenBound; //offset = 188, size = 4
		KeyHasBeenUnbound KeyHasBeenUnbound; //offset = 192, size = 4
		ResetPCBindingsText ResetPCBindingsText; //offset = 196, size = 4
		ConfirmResetPCBindingsText ConfirmResetPCBindingsText; //offset = 200, size = 4
		CancelResetPCBindingsText CancelResetPCBindingsText; //offset = 204, size = 4
		CannotBindConstantKey CannotBindConstantKey; //offset = 208, size = 4
		Array<GuiBind> AliasMap; //offset = 212, size = 12
		Array<NonBindableKeyDefinition> UnBindableKeys; //offset = 224, size = 12
		Int CaptureBindIndex; //offset = 236, size = 4
		Int CaptureBindNumber; //offset = 240, size = 4

		void SetOption( Int Type, Int Value );
		void SetOptionsOnGUI( SFXProfileSettings* Settings );
		void ApplySettings();
		void ResetPCToDefaults( Array<Int> lstOptsToReset );
		void InitSystemSettingsCache();
		void InitPCBindings( Bool Defaults );
		void ApplyPCBindings();
		void RefreshGUIBindings();
		Bool ProcessInput( Int ControllerId, Name Key, Byte EventType, Float AmountDepressed, Bool bGamepad );
		void CaptureNewBinding( Int BindIndex, Int BindNumber, PlayerController* PC );
		void BuildControlBindingList();
		void Callback_ResetPCToDefaults( Bool bAPressed, Int Context );
		void Helper_DoPCBindingReset( BioPlayerController* PC );
		void Callback_ResetPCBindings( Bool bAPressed, Int Context );
		void onExIntResetToDefaults( String sPackedIDs, MassEffectGuiManager* GuiMan );
		void HandleEvent( Byte Command, Array<String> lstArguments, MassEffectGuiManager* GuiMan, BioPlayerController* PC, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams Params );
		void OnPanelAdded();
	};

	class BioSFHandler_PCPauseMenu: public BioSFHandler_BrowserWheel
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCPauseMenu, BioSFHandler_BrowserWheel, SFXGame )

	public:

		Bool bWaitForNextFrame: 1; //offset = 136, size = 4

		void Update( Float fDeltaT );
		void MainMenuConfirm( Bool bAPressed, Int nContext );
		void HandleInputEvent( Byte Event, Float fValue );
		void ExitConfirm( Bool bAPressed, Int nContext );
		void ExitGame( BioSFHandler_MessageBox* oMsgBox, BioMessageBoxOptionalParams stParams, MassEffectGuiManager* oManager );
		void HandleEvent( Byte nCommand, Array<String> lstArguments );
		void OnPanelRemoved();
		void OnPanelAdded();
	};

	const char* Init = 4;
	const char* AnyKeyPressed = 3;
	const char* FadeinComplete = 2;
	const char* FadeoutComplete = 1;

	class BioSFHandler_Splash: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Splash, BioSFHandler, SFXGame )

	public:

		Float fAttractModeTimeout; //offset = 104, size = 4
		Float fLegalTimeout; //offset = 108, size = 4
		Float fAttractModeDelay; //offset = 112, size = 4
		Float fShowLegalTime; //offset = 116, size = 4
		Bool bSuppressAttractMode: 1; //offset = 120, size = 4
		Bool bPressedStart: 1; //offset = 120, size = 4
		srNoLoginStart srNoLoginStart; //offset = 124, size = 4
		srConfirmNoLoginStart srConfirmNoLoginStart; //offset = 128, size = 4
		srCancelNoLoginStart srCancelNoLoginStart; //offset = 132, size = 4

		void OnPanelAdded( WorldInfo* oWorld );
		void StartTimeout( Bool bShowLegal, ASParams stParam, Array<ASParams> lstParams );
		void Update( Float fDeltaT );
		void Initialize( ASParams stParam, Array<ASParams> lstParams, BioPlayerController* PC );
		void HandleEvent( Byte nCommand, Array<String> lstArguments );
		void AdvanceScreen( BioPlayerController* PC, OnlineSubsystem* OnlineSub, PlayerInt PlayerInt, SFXEngine* Engine );
		void HandleInputEvent( Byte Event, Float fValue );
		void Callback_NoLoginStart( Bool bAPressed, Int Context );
		void DisplayNoProfileConfirmation( MassEffectGuiManager* GuiMan, BioMessageBoxOptionalParams Params );
		void Callback_LoginComplete( Bool bIsOpening, OnlineSubsystem* OnlineSub, SystemInt SystemInt, PlayerInt PlayerInt, MassEffectGuiManager* GuiMan, Int ControllerId );
		void CheckLogin( MassEffectGuiManager* GuiMan, Int ControllerId, OnlineSubsystem* OnlineSub, PlayerInt PlayerInt, SystemInt SystemInt, LocalPlayer* LP );
	};

	class BioSFHandler_PCSplash: public BioSFHandler_Splash
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCSplash, BioSFHandler_Splash, SFXGame )

	public:

		void Update( Float fDeltaT );
		void AdvanceScreen();
		void HandleEvent( Byte nCommand, Array<String> lstArguments );
		void OnPanelRemoved();
	};

	class BioSFHandler_ReplayCharacterSelect: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_ReplayCharacterSelect, BioSFHandler, SFXGame )

	public:

		String m_ActiveCharId; //offset = 104, size = 12
	};

	const char* TutorialComplete = 1;

	class BioSFHandler_Tutorial: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Tutorial, BioSFHandler, SFXGame )

	public:

		Bool m_bGameWasPaused: 1; //offset = 104, size = 4
		Bool m_bInputModeCached: 1; //offset = 104, size = 4
		__CompletionCallback__Delegate __CompletionCallback__Delegate; //offset = 108, size = 12

		void HandleEvent( Byte nCommand, Array<String> lstArguments, BioPlayerController* oController );
		void CompletionCallback();
	};

	enum MessageBoxIcon
	{
		MBI_None,
		MBI_Error,
		MBI_Warning,
	};

	class BioSFHandler_XBoxMessageBox: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_XBoxMessageBox, BioSFHandler, SFXGame )

	public:

		Int nSelectedButton; //offset = 104, size = 4
		Bool bMessageBoxVisible: 1; //offset = 108, size = 4

		void DisplayMessageBox( srTitle srTitle, srMessage srMessage, Array<srButtons> srButtons, Byte nIcon, Int nDefaultButton );
	};

	class BioSkillGame_Base_Handler: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSkillGame_Base_Handler, BioSFHandler, SFXGame )

	public:

		Float m_fTecTimeMultiplier; //offset = 104, size = 4
		Bool m_bRewardOnTimeFail: 1; //offset = 108, size = 4
		Bool m_bSuccessfulEndGame: 1; //offset = 108, size = 4
		Bool m_bCanceled: 1; //offset = 108, size = 4
		Int m_nStartingResource; //offset = 112, size = 4
		Int m_nPhase2Resource; //offset = 116, size = 4
		Int m_nPhase2Time; //offset = 120, size = 4
		Object* m_oDependent; //offset = 124, size = 4
		BioPawn* m_oUsingPawn; //offset = 128, size = 4
		Name m_sTecPlotStateName; //offset = 132, size = 8
		String m_sBackgroundMusic; //offset = 140, size = 12
		__OnSuccessCallback__Delegate __OnSuccessCallback__Delegate; //offset = 152, size = 12
		__OnFailureCallback__Delegate __OnFailureCallback__Delegate; //offset = 164, size = 12
		__OnCancelCallback__Delegate __OnCancelCallback__Delegate; //offset = 176, size = 12

		void Cancel();
		void ExIntGameOver( Bool bGameWon, Int nRemainingResource );
		void ExIntStartGame();
		void ExIntInitGame();
		void ExIntCancelGame();
		void ExIntStartLoopingSound();
		void ExIntStopLoopingSound();
		void ExIntInterruptGame();
		void OnCancelCallback( Int n_TimeTaken );
		void OnFailureCallback( Int n_TimeTaken );
		void OnSuccessCallback( Int n_TimeTaken );
	};

	class BioSkillGame_Bypass_Handler: public BioSkillGame_Base_Handler
	{
		DECLARE_PACKAGE_CLASS( BioSkillGame_Bypass_Handler, BioSkillGame_Base_Handler, SFXGame )

	public:

		Vector m_vRightInput; //offset = 188, size = 12
		Vector m_vLeftInput; //offset = 200, size = 12
		Int m_nNumToSpawn; //offset = 212, size = 4
		Int m_nPCBurnDown; //offset = 216, size = 4
		Int m_nConsoleBurnDown; //offset = 220, size = 4

		void OnPanelAdded();
		void Update( Float fDeltaT, ASParams stParam, Array<ASParams> lstParams, Float DeadZone, Float fDeadzoneModifier );
		void HandleInputEvent( Byte Event, Float fValue );
	};

	class BioSkillGame_Decryption_Handler: public BioSkillGame_Base_Handler
	{
		DECLARE_PACKAGE_CLASS( BioSkillGame_Decryption_Handler, BioSkillGame_Base_Handler, SFXGame )

	public:

		Int m_nPercentDanger; //offset = 188, size = 4
		Int m_nPercentGood; //offset = 192, size = 4
		Float m_fSpeed; //offset = 196, size = 4

		void OnPanelAdded();
		void Update( Float fDeltaT, ASParams stParam, Array<ASParams> lstParams );
		void onSelectPressed();
		void onRightPressed( ASParams stParam, Array<ASParams> lstParams );
		void onLeftPressed( ASParams stParam, Array<ASParams> lstParams );
		void onUpPressed( ASParams stParam, Array<ASParams> lstParams );
		void onDownPressed( ASParams stParam, Array<ASParams> lstParams );
	};

	enum ESkillGameButtons
	{
		SKILL_GAME_BUTTON_A,
		SKILL_GAME_BUTTON_B,
		SKILL_GAME_BUTTON_X,
	};

	class BioSkillGame_Handler: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSkillGame_Handler, BioSFHandler, SFXGame )

	public:

		Byte m_nSkillGameType; //offset = 104, size = 1
		Int m_nButtonInSequence; //offset = 108, size = 4
		Int m_nDisplayedButton; //offset = 112, size = 4
		Int m_nButtonsSuccessfullyPressed; //offset = 116, size = 4
		Int m_nTotalButtonsToDisplay; //offset = 120, size = 4
		Int m_nButtonTimoutSequence; //offset = 124, size = 4
		Float m_fButtonTimeout; //offset = 128, size = 4
		Float m_fButtonDelayTime; //offset = 132, size = 4
		Object* m_oDependent; //offset = 136, size = 4
		BioPawn* m_oUsingPawn; //offset = 140, size = 4
		Bool m_bButtonIconVisible: 1; //offset = 144, size = 4
		Bool m_bSuccessfulEndGame: 1; //offset = 144, size = 4
		Bool m_bDoNotUseSalvage: 1; //offset = 144, size = 4
		Bool m_bSkillGameFailed: 1; //offset = 144, size = 4
		m_GameMessageSuccess m_GameMessageSuccess; //offset = 148, size = 4
		m_GameMessageFailure m_GameMessageFailure; //offset = 152, size = 4
		m_GameMessageDuringGame m_GameMessageDuringGame; //offset = 156, size = 4
		m_preGameButtonAText m_preGameButtonAText; //offset = 160, size = 4
		m_preGameButtonBText m_preGameButtonBText; //offset = 164, size = 4
		m_preGameButtonXText m_preGameButtonXText; //offset = 168, size = 4
		__OnSuccessCallback__Delegate __OnSuccessCallback__Delegate; //offset = 172, size = 12
		__OnFailureCallback__Delegate __OnFailureCallback__Delegate; //offset = 184, size = 12
		__OnCancelCallback__Delegate __OnCancelCallback__Delegate; //offset = 196, size = 12

		void OnPanelAdded();
		void SetupGame( Int i_initialSalvage );
		void UpdateSalvage( Int i_salvage );
		void SetButtonVisible( Int i_ButtonType );
		void ClearAllButtons();
		void HandleSkillGameDisplayButton( Object* Params, Int nButtonType, BioWorldInfo* oBWorldInfo );
		void SkillGameTriggerNextButton( Float fButtonDelayTime, Object* Params, BioWorldInfo* oBWorldInfo );
		void HandleSkillGameButtonTimeout( Object* Params );
		void HandleSkillGameButtonPress( Int nButtonPressed );
		void EndSkillGame( Bool bCompleted, Bool bNoSalvage, Bool bGameCanceled, BioWorldInfo* oBWorldInfo, BioSFHandler_MessageBox* oMessageBox, BioPlayerController* PlayerController, sMessageBoxText sMessageBoxText, BioMessageBoxOptionalParams stParams );
		void EndSkillGameEx( Bool bCompleted );
		void StartSkillGameEx( BioPawn* oUsingPawn, Object* oPlaceable, Byte nSkillGameType, Int nTotalButtonsToDisplay, Float fButtonTimeout, Float fButtonDelayTime );
		void InitializeStringReferences( i_GameMessageSuccess i_GameMessageSuccess, i_GameMessageFailure i_GameMessageFailure, i_GameMessageDuringGame i_GameMessageDuringGame, i_preGameButtonAText i_preGameButtonAText, i_preGameButtonBText i_preGameButtonBText, i_preGameButtonXText i_preGameButtonXText );
		void InitializeSkillGameData( BioPawn* oUsingPawn, Object* oDependent, Byte nSkillGameType, Int nTotalButtonsToDisplay, Float fButtonTimeout, Float fButtonDelayTime );
		void OnCancelCallback( Int n_SalvageUsed );
		void OnFailureCallback( Int n_SalvageUsed );
		void OnSuccessCallback( Int n_SalvageUsed );
	};

	enum SFXChoiceColors
	{
		CHOICECOLOR_Orange,
		CHOICECOLOR_Red,
	};

	struct SFXChoiceEntry
	{
		srChoiceName srChoiceName; //offset = 0, size = 4
		srChoiceTitle srChoiceTitle; //offset = 4, size = 4
		Texture2D* oChoiceImage; //offset = 8, size = 4
		srChoiceImageTitle srChoiceImageTitle; //offset = 12, size = 4
		srChoiceDescription srChoiceDescription; //offset = 16, size = 4
		Int nOptionalPaneItemValue; //offset = 20, size = 4
		Byte ChoiceColor; //offset = 24, size = 1
		Int nChoiceID; //offset = 28, size = 4
		Byte eResource; //offset = 32, size = 1
		srActionText srActionText; //offset = 36, size = 4
		Bool bDefaultSelection: 1; //offset = 40, size = 4
		Array<SFXTokenMapping> m_mapTokenIDToActual; //offset = 44, size = 12
		Bool bDisabled: 1; //offset = 56, size = 4
		Bool bNested: 1; //offset = 56, size = 4
		Bool bOptionalPaneHideCost: 1; //offset = 56, size = 4
		String sChoiceName; //offset = 60, size = 12
		String sChoiceTitle; //offset = 72, size = 12
		String sChoiceImageTitle; //offset = 84, size = 12
		String sChoiceDescription; //offset = 96, size = 12
		String sActionText; //offset = 108, size = 12
	};

	class SFXGameChoiceGUIData: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXGameChoiceGUIData, Object, SFXGame )

	public:

		m_srTitle m_srTitle; //offset = 60, size = 4
		m_srSubTitle m_srSubTitle; //offset = 64, size = 4
		m_srAText m_srAText; //offset = 68, size = 4
		m_srBText m_srBText; //offset = 72, size = 4
		Bool m_ShowOptionalPane: 1; //offset = 76, size = 4
		m_srOptionalPaneTitleText m_srOptionalPaneTitleText; //offset = 80, size = 4
		m_srOptionalPaneItemValuePrefixText m_srOptionalPaneItemValuePrefixText; //offset = 84, size = 4
		m_srOptionalPaneValuePrefixText m_srOptionalPaneValuePrefixText; //offset = 88, size = 4
		Int m_nOptionalPaneValue; //offset = 92, size = 4
		Byte m_eOptionalPaneResourceType; //offset = 96, size = 1
		Array<SFXChoiceEntry> lstChoices; //offset = 100, size = 12

		void RemoveTokenMapping( SFXChoiceEntry Data, Int nTokenID );
		void SetTokenMapping( SFXChoiceEntry Data, Int nTokenID, String sValue );
		void ClearChoiceList();
		Bool AddChoice( SFXChoiceEntry Params );
		void SetupOptionalPane( Bool bShowOptionalPane, srOptionalPaneTitleText srOptionalPaneTitleText, srOptionalPaneItemValuePrefixText srOptionalPaneItemValuePrefixText, srOptionalPaneValuePrefixText srOptionalPaneValuePrefixText, Int nOptionalPaneValue );
		void SetDisplayText( srTitle srTitle, srSubtitle srSubtitle, srAText srAText, srBText srBText );
	};

	struct SFXChoiceEntryNoStrRef
	{
		String sChoiceName; //offset = 0, size = 12
		String sChoiceTitle; //offset = 12, size = 12
		Texture2D* oChoiceImage; //offset = 24, size = 4
		String sChoiceImageTitle; //offset = 28, size = 12
		String sChoiceDescription; //offset = 40, size = 12
		Int nOptionalPaneItemValue; //offset = 52, size = 4
		Byte ChoiceColor; //offset = 56, size = 1
		Int nChoiceID; //offset = 60, size = 4
		Byte eResource; //offset = 64, size = 1
		String sActionText; //offset = 68, size = 12
		Bool bDefaultSelection: 1; //offset = 80, size = 4
		Array<SFXTokenMapping> m_mapTokenIDToActual; //offset = 84, size = 12
		Bool bDisabled: 1; //offset = 96, size = 4
		Bool bNested: 1; //offset = 96, size = 4
	};

	class SFXGameChoiceGUIData_PRCShop: public SFXGameChoiceGUIData
	{
		DECLARE_PACKAGE_CLASS( SFXGameChoiceGUIData_PRCShop, SFXGameChoiceGUIData, SFXGame )

	public:

		Array<SFXChoiceEntryNoStrRef> lstChoicesNoStrRef; //offset = 112, size = 12

		void AddChoiceNoStrRef( SFXChoiceEntryNoStrRef oChoice );
	};

	class SFXSF_ReticleBase: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXSF_ReticleBase, Object, SFXGame )

	public:

		SFXSFHandler_Reticle* m_pHandler; //offset = 60, size = 4
		Actor* m_pTarget; //offset = 64, size = 4
		Bool m_bFirstUpdate: 1; //offset = 68, size = 4
		Bool m_bHasInTransition: 1; //offset = 68, size = 4
		Bool m_bHasOutTransition: 1; //offset = 68, size = 4
		Bool m_bVisible: 1; //offset = 68, size = 4
		Bool m_bInTransitionOut: 1; //offset = 68, size = 4
		Vector2D m_vHUDLocation; //offset = 72, size = 8
		String m_sSFPath; //offset = 80, size = 12
		String m_sFlashLinkageIdentifier; //offset = 92, size = 12
		Int m_nFlashLayerModifier; //offset = 104, size = 4

		void UpdateReticleDisplay();
		Bool IsUpdateRequired( Float fDeltaT );
		void PlayVisibleTransition( Bool bVisible );
		void ClearReticle( Bool bTransition );
		void SetVisible( Bool bVisible, Bool bTransition );
	};

	class SFXSF_ReticleCombatObject: public SFXSF_ReticleBase
	{
		DECLARE_PACKAGE_CLASS( SFXSF_ReticleCombatObject, SFXSF_ReticleBase, SFXGame )

	public:
	};

	class SFXSF_ReticleCombatTarget: public SFXSF_ReticleBase
	{
		DECLARE_PACKAGE_CLASS( SFXSF_ReticleCombatTarget, SFXSF_ReticleBase, SFXGame )

	public:

		Vector2D m_vExtents; //offset = 108, size = 8
		Bool m_bPreviouslyInitialized: 1; //offset = 116, size = 4
		Bool m_bDoingActionFlourish: 1; //offset = 116, size = 4
		Float m_fMinTargetSelectionWidth; //offset = 120, size = 4
		Float m_fMinTargetSelectionHeight; //offset = 124, size = 4
		Float m_fReticleShrinkTime; //offset = 128, size = 4
		Vector2D m_vExtentShrinkDelta; //offset = 132, size = 8
		Float m_fFlourishLifeTime; //offset = 140, size = 4
		Float m_fSelectionBoxScalingFactor; //offset = 144, size = 4

		void ClearReticle( Bool bTransition );
	};

	const char* SaveOption_NewSaveGame = 11;
	const char* SaveOption_ChangeStorageDevice = 10;
	const char* SaveOption_DeleteGame = 4;
	const char* SaveOption_SaveGame = 2;
	const char* SaveOption_Initialize = 1;

	enum ESaveGuiMode
	{
		SaveGuiMode_BrowserWheel,
		SaveGuiMode_MainMenu,
	};

	enum ESaveGuiRecordType
	{
		SaveRecordType_Default,
		SaveRecordType_QuickSave,
		SaveRecordType_AutoSave,
	};

	struct SaveGUIRecord
	{
		SFXSaveGame* SaveGame; //offset = 0, size = 4
		String FriendlyName; //offset = 4, size = 12
		Texture2D* AreaImage; //offset = 16, size = 4
		String ImagePath; //offset = 20, size = 12
		Int SaveIndex; //offset = 32, size = 4
		Byte Type; //offset = 36, size = 1
	};

	struct SaveGUIAreaInfo
	{
		String AreaName; //offset = 0, size = 12
		AreaStrRef AreaStrRef; //offset = 12, size = 4
		String ImageName; //offset = 16, size = 12
	};

	class SFXSFHandler_Save: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_Save, BioSFHandler, SFXGame )

	public:

		Array<SaveGUIAreaInfo> AreaData; //offset = 104, size = 12
		Texture2D* DefaultAreaImage; //offset = 116, size = 4
		String DefaultImageName; //offset = 120, size = 12
		Array<SaveGUIRecord> SaveList; //offset = 132, size = 12
		Int MaxSaves; //offset = 144, size = 4
		String ImagePackageName; //offset = 148, size = 12
		Bool bWaitingOnMsgBox: 1; //offset = 160, size = 4
		Byte GuiMode; //offset = 164, size = 1
		DefaultAreaNameText DefaultAreaNameText; //offset = 168, size = 4
		AutoSaveText AutoSaveText; //offset = 172, size = 4
		ChapterSaveText ChapterSaveText; //offset = 176, size = 4
		QuickSaveText QuickSaveText; //offset = 180, size = 4
		SaveGameText SaveGameText; //offset = 184, size = 4
		SaveDisplayText SaveDisplayText; //offset = 188, size = 4
		NewGameText NewGameText; //offset = 192, size = 4
		TimePlayedText TimePlayedText; //offset = 196, size = 4
		LastPlayedText LastPlayedText; //offset = 200, size = 4
		LastPlayedTimeText LastPlayedTimeText; //offset = 204, size = 4
		OverwriteSaveGameText OverwriteSaveGameText; //offset = 208, size = 4
		ConfirmOverwriteSaveGameText ConfirmOverwriteSaveGameText; //offset = 212, size = 4
		CancelOverwriteSaveGameText CancelOverwriteSaveGameText; //offset = 216, size = 4
		DeleteGameText DeleteGameText; //offset = 220, size = 4
		ConfirmDeleteGameText ConfirmDeleteGameText; //offset = 224, size = 4
		CancelDeleteGameText CancelDeleteGameText; //offset = 228, size = 4
		String CareerNameOverride; //offset = 232, size = 12

		Int GetNewSaveIdx(, Int idx, Int NewIdx );
		Bool GetPlayerData( String FirstName, LastName LastName, ClassName ClassName, Int Level, MassEffectGuiManager* GuiMan, SFXPawn_Player* Player );
		void HandleEvent( Byte Command, Array<String> lstArguments, MassEffectGuiManager* GuiMan, BioPlayerController* PC, Array<ASParams> args, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams Params, Int SaveIdx );
		void Callback_DeviceSelectionComplete( Bool bWasSuccessful, BioPlayerController* PC, PlayerIntEx PlayerIntEx );
		void ResetGui();
		void Callback_ConfirmDelete( Bool bAPressed, Int Context, BioPlayerController* PC );
		void Callback_ConfirmOverwrite( Bool bAPressed, Int Context, MassEffectGuiManager* GuiMan, BioPlayerController* PC );
		void InitializeSaveList();
	};

	const char* LoadOption_DeleteCareer = 8;
	const char* LoadOption_SelectCareer = 7;
	const char* LoadOption_InitializeCareers = 6;
	const char* LoadOption_ChangeStorageDevice = 11;
	const char* LoadOption_QuitToMainMenu = 5;
	const char* LoadOption_DeleteGame = 4;
	const char* LoadOption_LoadGame = 3;
	const char* LoadOption_Initialize = 1;

	enum ELoadGuiMode
	{
		LoadGuiMode_Default,
		LoadGuiMode_Legacy,
	};

	struct SaveGUICareerRecord
	{
		String CareerName; //offset = 0, size = 12
		String FirstName; //offset = 12, size = 12
		Byte Origin; //offset = 24, size = 1
		Byte Notoriety; //offset = 25, size = 1
		String ClassName; //offset = 28, size = 12
		SaveTimeStamp CreationDate; //offset = 40, size = 16
		Bool bActiveCareer: 1; //offset = 56, size = 4
		Int DeviceID; //offset = 60, size = 4
	};

	class SFXSFHandler_Load: public SFXSFHandler_Save
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_Load, SFXSFHandler_Save, SFXGame )

	public:

		Array<SaveGUICareerRecord> CareerList; //offset = 244, size = 12
		Array<SaveGameRecord> LegacyRecords; //offset = 256, size = 12
		LoadGameLoseProgressText LoadGameLoseProgressText; //offset = 268, size = 4
		ConfirmLoadGameText ConfirmLoadGameText; //offset = 272, size = 4
		CancelLoadGameText CancelLoadGameText; //offset = 276, size = 4
		CharNameText CharNameText; //offset = 280, size = 4
		DeleteCareerText DeleteCareerText; //offset = 284, size = 4
		ConfirmDeleteCareerText ConfirmDeleteCareerText; //offset = 288, size = 4
		CancelDeleteCareerText CancelDeleteCareerText; //offset = 292, size = 4
		CorruptSaveWarningText CorruptSaveWarningText; //offset = 296, size = 4
		ConfirmDeleteCorruptText ConfirmDeleteCorruptText; //offset = 300, size = 4
		CancelDeleteCorruptText CancelDeleteCorruptText; //offset = 304, size = 4
		Byte LoadMode; //offset = 308, size = 1
		Array<String> CorruptedSaveGames; //offset = 312, size = 12
		Bool bFromMainMenu: 1; //offset = 324, size = 4

		void GameSessionEnded( OnlineSubsystem* OnlineSub, SystemInt SystemInt );
		void OnStorageDeviceChanged( MassEffectGuiManager* GuiMan );
		void OnPanelRemoved( OnlineSubsystem* OnlineSub, SystemInt SystemInt );
		void OnPanelAdded( OnlineSubsystem* OnlineSub, SystemInt SystemInt );
		void HandleEvent( Byte Command, Array<String> lstArguments, MassEffectGuiManager* GuiMan, BioPlayerController* PC, SFXEngine* Engine, Array<ASParams> args, BioMessageBoxOptionalParams Params, Int SaveIdx, Bool bStartInCareerSelection );
		void CheckForCorruptSaves( MassEffectGuiManager* GuiMan, BioMessageBoxOptionalParams Params );
		void Callback_ConfirmDeleteCorruptSaves( Bool bAPressed, Int Context );
		void ResetGui();
		void Callback_ConfirmDeleteCareer( Bool bAPressed, Int Context, BioPlayerController* PC );
		void Callback_ConfirmLoadGame( Bool bAPressed, Int Context, BioPlayerController* PC, SFXEngine* Engine );
		void DeleteCareer( Int CareerIdx );
		void InitializeCareers();
		void InitializeLoadList( Int CareerIdx );
	};

	const char* WEAPON_FAIL = 1;
	const char* WEAPON_NONE = 0;

	enum SFXPowerWheelWeaponState
	{
		PWWS_Normal,
		PWWS_Hover,
		PWWS_Disabled,
	};

	enum SFXPowerWheelPowerState
	{
		PWPS_Selectable,
		PWPS_Selected,
		PWPS_Inactive,
		PWPS_Activated,
		PWPS_Overload,
	};

	enum SFXPowerWheelMapButtonIcon
	{
		PWBI_Icon_NONE,
		PWBI_FaceButtonTop,
		PWBI_FaceButtonLeft,
		PWBI_DPadLeft,
		PWBI_DPadRight,
	};

	enum SFXPowerWheelPawnID
	{
		PWPID_Player,
		PWPID_Hench1,
	};

	enum SFXPowerWheelMode
	{
		PWM_NONE,
		PWM_Powers,
		PWM_Weapons,
	};

	struct SFXRadarElementData
	{
		Vector vActorLocation; //offset = 0, size = 12
		Vector vPosition; //offset = 12, size = 12
		Int nSize; //offset = 24, size = 4
		Bool bLocked: 1; //offset = 28, size = 4
		Byte eRadarType; //offset = 32, size = 1
		Int nRelativeZ; //offset = 36, size = 4
		Int nID; //offset = 40, size = 4
		Bool bUpdate: 1; //offset = 44, size = 4
		Bool bUpdateLock: 1; //offset = 44, size = 4
	};

	struct SFXPowerWheelPawnIndices
	{
		Array<Int> aPlayer; //offset = 0, size = 12
		Array<Int> aHench1; //offset = 12, size = 12
		Array<Int> aHench2; //offset = 24, size = 12
	};

	struct SFXPowerWheelIconWeapon
	{
		Byte eWeaponState; //offset = 28, size = 1
		Int nWeaponIcon; //offset = 32, size = 4
		Int nAmmo; //offset = 36, size = 4
		String sName; //offset = 40, size = 12
		String sDescription; //offset = 52, size = 12
		Bool bEquipped: 1; //offset = 64, size = 4
		Class* oWeaponClass; //offset = 68, size = 4
		String sIconResource; //offset = 72, size = 12
		Bool bHenchIcon: 1; //offset = 84, size = 4
	};

	struct SFXPowerWheelIconPower
	{
		Byte eState; //offset = 28, size = 1
		Byte eDesiredState; //offset = 29, size = 1
		SFXPower* pPower; //offset = 32, size = 4
		BioPawn* pPawn; //offset = 36, size = 4
		Bool bSelected: 1; //offset = 40, size = 4
		Bool bVisible: 1; //offset = 40, size = 4
		Bool bDelayedFlash: 1; //offset = 40, size = 4
		Int nIcon; //offset = 44, size = 4
		Int nCooldownValue; //offset = 48, size = 4
		Bool bMapped: 1; //offset = 52, size = 4
		String sName; //offset = 56, size = 12
		String sDescription; //offset = 68, size = 12
		Name nmPowerName; //offset = 80, size = 8
		Bool bDragHover: 1; //offset = 88, size = 4
		Int nPowerID; //offset = 92, size = 4
		Bool bQuickSlotIcon: 1; //offset = 96, size = 4
		SFXPowerWheelButtonIcon oMappedIcon; //offset = 100, size = 16
		String sMappedBGPath; //offset = 116, size = 12
	};

	struct SFXPowerWheelIcon
	{
		String sPath; //offset = 0, size = 12
		String sID; //offset = 12, size = 12
		Float fBoundary; //offset = 24, size = 4
	};

	struct SFXPowerWheelButtonIcon
	{
		Byte eIcon; //offset = 0, size = 1
		String sPath; //offset = 4, size = 12
	};

	class SFXSFHandler_PowerWheel: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PowerWheel, BioSFHandler, SFXGame )

	public:

		Bool m_bVisible: 1; //offset = 104, size = 4
		Bool m_bRadarVisible: 1; //offset = 104, size = 4
		Bool m_bRadarOn: 1; //offset = 104, size = 4
		Bool m_bInOutTransition: 1; //offset = 104, size = 4
		Bool m_bCanMapPlayerPowers: 1; //offset = 104, size = 4
		Bool m_bHavePathAssistGoal: 1; //offset = 104, size = 4
		Bool m_bPingPathAssistArrow: 1; //offset = 104, size = 4
		Bool m_bInfoTextBackgroundVisible: 1; //offset = 104, size = 4
		Bool m_bDesiredInfoTextBackgroundVisibility: 1; //offset = 104, size = 4
		Bool m_bWheelArrowVisible: 1; //offset = 104, size = 4
		Bool m_bObjectiveRadarOn: 1; //offset = 104, size = 4
		Bool m_bPulsingRadar: 1; //offset = 104, size = 4
		Bool m_bSquadChanged: 1; //offset = 104, size = 4
		BioPlayerController* m_pPlayerController; //offset = 108, size = 4
		BioPlayerSquad* m_pPlayerSquad; //offset = 112, size = 4
		Int m_nProcessedSquadPopulation; //offset = 116, size = 4
		Float m_fButtonTextPadding; //offset = 120, size = 4
		Float m_fMovieWidth; //offset = 124, size = 4
		Float m_fMovieHeight; //offset = 128, size = 4
		Vector2D m_vViewportOffsets; //offset = 132, size = 8
		Byte m_ePowerWheelMode; //offset = 140, size = 1
		Float m_fRemainingRadarPulseTime; //offset = 144, size = 4
		Float m_fInfoTextChangeDelay; //offset = 148, size = 4
		Float m_fRemainingInfoTextChangeDelay; //offset = 152, size = 4
		Float m_fTimeToNextVehicleRadarUpdate; //offset = 156, size = 4
		Float m_fTimeToNextObjectiveUpdate; //offset = 160, size = 4
		Vector m_vLStickInput; //offset = 164, size = 12
		Float m_fLastProcessedStickAngle; //offset = 176, size = 4
		Float m_fLastStickDeflection; //offset = 180, size = 4
		Float m_fLStickAngleDeltaDeg; //offset = 184, size = 4
		Int m_nCurrentPowerIconIndex; //offset = 188, size = 4
		Int m_nCurrentWeaponIconIndex; //offset = 192, size = 4
		Array<SFXPowerWheelIconPower> m_aPowerIcons; //offset = 196, size = 12
		Array<SFXPowerWheelIconWeapon> m_aWeaponIcons; //offset = 208, size = 12
		String m_aPowerStatePaths[8]; //offset = 220, size = 12
		Int m_aWeaponStateFrames[4]; //offset = 316, size = 4
		Int m_nCurrentSelectedWeapon; //offset = 332, size = 4
		SFXPowerWheelPawnIndices m_oPowerIndices; //offset = 336, size = 36
		SFXPowerWheelPawnIndices m_oWeaponIndices; //offset = 372, size = 36
		BioPawn* m_pShepardPawn; //offset = 408, size = 4
		BioPawn* m_pHench1Pawn; //offset = 412, size = 4
		BioPawn* m_pHench2Pawn; //offset = 416, size = 4
		Array<SFXRadarElementData> m_aRadarElementData; //offset = 420, size = 12
		Actor* m_pCurrentPlayerSelection; //offset = 432, size = 4
		SFXPowerWheelButtonIcon m_oMapTextIcon1; //offset = 436, size = 16
		SFXPowerWheelButtonIcon m_oMapTextIcon2; //offset = 452, size = 16
		String m_aMappingIconPaths[7]; //offset = 468, size = 12
		String m_sTitleTextPath; //offset = 552, size = 12
		String m_sNameTextPath; //offset = 564, size = 12
		String m_sInfoTextPath; //offset = 576, size = 12
		String m_sInfoTextBGPath; //offset = 588, size = 12
		String m_sUseButtonPath; //offset = 600, size = 12
		String m_sUseTextPath; //offset = 612, size = 12
		String m_sMapButton1Path; //offset = 624, size = 12
		String m_sMapText1Path; //offset = 636, size = 12
		String m_sMapButton2Path; //offset = 648, size = 12
		String m_sMapText2Path; //offset = 660, size = 12
		Array<String> m_aRadarIconFramePaths; //offset = 672, size = 12
		String m_sShepardBlockerPath; //offset = 684, size = 12
		String m_sHench1BlockerPath; //offset = 696, size = 12
		String m_sHench2BlockerPath; //offset = 708, size = 12
		String m_sRadarPath; //offset = 720, size = 12
		String m_sTeam1StatusTextPath; //offset = 732, size = 12
		String m_sTeam1PowerTextPath; //offset = 744, size = 12
		String m_sTeam2StatusTextPath; //offset = 756, size = 12
		String m_sTeam2PowerTextPath; //offset = 768, size = 12
		String m_sWheelArrowPath; //offset = 780, size = 12
		Float m_fCacheTargetDirection; //offset = 792, size = 4
		Float m_fCacheNorthDirection; //offset = 796, size = 4
		Float m_fCachePathDirection; //offset = 800, size = 4
		Vector2D m_vCacheRadarBoundaryTopLeft; //offset = 804, size = 8
		Vector2D m_vCacheRadarBoundaryBottomRight; //offset = 812, size = 8
		Float m_fCacheRadarBoundaryRotation; //offset = 820, size = 4
		m_srBlocked m_srBlocked; //offset = 824, size = 4
		m_srPawnIncapacitated m_srPawnIncapacitated; //offset = 828, size = 4
		m_srWeaponSwitching m_srWeaponSwitching; //offset = 832, size = 4
		m_srWeaponOverheating m_srWeaponOverheating; //offset = 836, size = 4
		m_srWeaponReloading m_srWeaponReloading; //offset = 840, size = 4
		m_srDisplayTitle m_srDisplayTitle; //offset = 844, size = 4
		m_srWeaponWheelDisplayTitle m_srWeaponWheelDisplayTitle; //offset = 848, size = 4
		m_srPowerWheelDisplayTitle m_srPowerWheelDisplayTitle; //offset = 852, size = 4
		m_srEquip m_srEquip; //offset = 856, size = 4
		m_srUse m_srUse; //offset = 860, size = 4
		m_srMap m_srMap; //offset = 864, size = 4
		m_srOverheated m_srOverheated; //offset = 868, size = 4
		m_srRecharging m_srRecharging; //offset = 872, size = 4
		m_srUnavailable m_srUnavailable; //offset = 876, size = 4
		m_srRadarRangeUnits m_srRadarRangeUnits; //offset = 880, size = 4
		m_srNorthText m_srNorthText; //offset = 884, size = 4
		m_srObjective m_srObjective; //offset = 888, size = 4
		Float m_fRadarDirectionChangeDelta; //offset = 892, size = 4
		Float m_fRadarElementLocationChangeDelta; //offset = 896, size = 4
		Float m_fRadarRadius; //offset = 900, size = 4
		Vector2D m_vBoundaryDimensions; //offset = 904, size = 8
		Float m_fBoundaryShrinkFactor; //offset = 912, size = 4
		String m_sNotSuggestedPrefix; //offset = 916, size = 12
		String m_sNotSuggestedSuffix; //offset = 928, size = 12
		String m_sMap1Token; //offset = 940, size = 12
		String m_sMap2Token; //offset = 952, size = 12
		String m_sMapHench1Token; //offset = 964, size = 12
		String m_sMapHench2Token; //offset = 976, size = 12
		Float m_fVehicleRadarUpdateInterval; //offset = 988, size = 4
		Float m_fRadarObjectiveUpdateInterval; //offset = 992, size = 4

		Bool SetHenchmanMappedPower( BioPawn* pPawn, Name nmPower );
		Name GetHenchmanMappedPower( BioPawn* pPawn );
		void SetMappingIcon( SFXPowerWheelButtonIcon oIcon, Byte eNewIcon, Bool bClear );
		void ExInt_WheelTransitionOutDone();
		Bool GetMapBoundaryValues( Vector2D vTopLeft, Vector2D vBottomRight, Float fBoundaryRotation );
		void GetRadarDirectionValues( Float fArrowDirection, Float fNorthDirection, Float fPathingArrowDirection );
		void CollectRadarElementData( Array<SFXRadarElementData> aRadarData );
		void PulseRadar( Float fPulseTime );
		void UpdateRadarMapBoundaries( Vector2D vTopLeft, Vector2D vBottomRight, Float fBoundaryRotation, Vector2D vDimensions, Vector2D vScale, Vector2D vTopLine );
		void UpdateRadarArrows( Float fTargetDirection, Float fNorthDirection, Float fPathDirection );
		void UpdateRadarElementPositions( Array<SFXRadarElementData> aRadarData, Int nElement, SFXRadarElementData oTempData, String sPath );
		void UpdateRadarDisplay( Bool bObjectiveMode, Bool bInVehicle, Array<ASParams> aParams, String sElementPath, Int nElement, SFXRadarElementData oTempData, String sTemp, Int nTemp );
		void RadarVisibilityChanged( Bool bVisible, Bool bObjectiveMode );
		void SelectCurrentWheelItem( Byte eMode );
		void HandleInputEvent( Byte Event, Float fValue );
		void SelectCurrentWeapon( SFXPowerWheelIconWeapon oWeaponIcon, BioPawn* pPawn, SFXWeapon* pWeapon, SFXInventoryManager* pInvManager, Array<Int> aIconIndices, Int nIcon );
		void SortWeapons( BioPawn* pPawn, Array<SFXWeapon*> aWeapons );
		void SetWeaponIcon( SFXWeapon* pWeap, Int nSlotIndex, BioPawn* pPawn );
		void SetupWeaponDisplayForPawn( BioPawn* pPawn, Byte ePawn, SFXWeapon* pWeap, Int nWeaponSlot, Array<Int> aIconIndices, Int nSlotIndex, String sBlockingLabel, Bool bImmediateOrder, Bool bQueuedOrder, String sBlockerClipPath, Bool bNoWeapons, Array<SFXWeapon*> aWeapons, Int nWeap );
		void LeaveWeaponIcon( Int nIconIndex );
		void HoverWeaponIcon( Int nIconIndex, Bool bForceUpdate, String sName, String sInfo );
		void UpdateWeaponIconDisplay( SFXPowerWheelIconWeapon oIcon, String sAltPath, String sAmmoCount, String sPath );
		void SelectWeapon( Int nWeaponIndex );
		void SetWeaponState( Int nWeapIndex, Byte eNewWeapState, Array<ASParams> aParams, SFXPowerWheelIconWeapon oIcon );
		void SetWeaponTypeDisplay( BioSFPanel* pPanel, String sIconPath, String sIconResource, Int nNewType, Array<ASParams> aParams );
		void SetWeaponType( Int nWeapIndex, String sWeaponIconResource, Int nNewWeapIcon, SFXPowerWheelIconWeapon oIcon );
		void MapCurrentPower( Byte eIcon );
		void SelectCurrentPower();
		Name GetCurrentHenchmanOrder( BioPawn* pPawn, SFXAI_Henchman* pHenchController, HenchmanOrder oNextOrder );
		void LeavePowerIcon( Int nIconIndex, Bool bSkipTransition, SFXPowerWheelIconPower oIcon );
		void SetInformationText( String sName, String sDesc );
		void UpdatePowerInformationText( SFXPowerWheelIconPower oIcon, String sDescriptionText, String sEvaluationText, Bool bGoodEval );
		void UpdateTextDisplayForIcon( Int nIconIndex, SFXPowerWheelIconPower oIcon, String sUseText, String sMap1Text, String sMap2Text, String sIcon1Token, String sIcon2Token, Byte eIcon1, Byte eIcon2 );
		void HoverPowerIcon( Int nIconIndex, Bool bSkipTransition, SFXPowerWheelIconPower oIcon, Name nmPower );
		Bool EvaluatePowerForTarget( SFXPowerWheelIconPower oIcon, Actor* pTarget, String sText );
		void SetPowerIconSelected( Int nIconIndex, Bool bSelected );
		void SetPowerIconState( Int nIconIndex, Byte eNewState );
		void SetMapText( String sText1, Byte eIcon1, String sText2, Byte eIcon2 );
		void SetUseText( String sText );
		void SetStatusAndPowerText( BioPawn* pPawn, Byte ePawnID, Int nStatusFlags, String sStatus, String sPowerStatus, String sStatusPath, String sPowerPath );
		void WheelVisibilityChanged( Bool bVisible, Int nIcon, Bool bPowerWheel, Bool bWeaponWheel );
		void HideWeaponIcon( BioSFPanel* pPanel, String sPath );
		void HidePowerIconByIndex( Int nIconIndex );
		Bool IsPawnBlocked( BioPawn* pPawn );
		void InitDisplay( Int nIcon, Float fTemp );
		void doHotKey( Int nIndex );
		Bool CanIssueQueuedOrder( Pawn* pPawn, SFXAI_Henchman* pHenchman, BioPlayerController* pPlayer );
		Bool CanIssueImmediateOrder( Pawn* pPawn, SFXAI_Henchman* pHenchman, BioPlayerController* pPlayer );
		BioPawn* GetPawnFromName( Name nmPawn, Bool bUseUniqueTag );
		void RemoveHenchman( BioPawn* pPawn );
		void OnAllowCameraRotation( Bool i_bValue );
		void GameSessionEnded();
		void OnPanelRemoved();
		void CleanupReferences( Int nIcon );
		void SetupPlayerPowers();
		void SetWheelVisible( Bool bVisible );
	};

	const char* NUM_KEYBOARD_QUICKSLOTS = 8;

	class SFXSFHandler_PCPowerWheel: public SFXSFHandler_PowerWheel
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PCPowerWheel, SFXSFHandler_PowerWheel, SFXGame )

	public:

		Bool m_bDashboardWeaponsOpen: 1; //offset = 996, size = 4
		Bool m_bDraggingPower: 1; //offset = 996, size = 4
		Bool m_bDraggingKey: 1; //offset = 996, size = 4
		Bool m_bDoingDrag: 1; //offset = 996, size = 4
		Bool m_bQuickSlotExpanded: 1; //offset = 996, size = 4
		Bool m_bQuickSlotVisible: 1; //offset = 996, size = 4
		Bool m_bEvalQuickSlotPowers: 1; //offset = 996, size = 4
		SFXPowerWheelIconWeapon m_oCenterWeaponIcon; //offset = 1000, size = 88
		SFXPowerWheelIconWeapon m_oHench1WeaponIcon; //offset = 1088, size = 88
		SFXPowerWheelIconWeapon m_oHench2WeaponIcon; //offset = 1176, size = 88
		Int m_nDraggingIcon; //offset = 1264, size = 4
		Vector2D m_vMouseDownPos; //offset = 1268, size = 8
		Vector2D m_vDragOffsets; //offset = 1276, size = 8
		Int m_nCurrentDropTarget; //offset = 1284, size = 4
		Float m_fQuickslotIconUpdateInterval; //offset = 1288, size = 4
		SFXPowerWheelIconPower m_aQuickSlotIcons[8]; //offset = 1292, size = 128
		Int m_nCurrentQuickSlot; //offset = 2316, size = 4
		SFXPowerWheelIconPower m_oDragPowerIcon; //offset = 2320, size = 128
		SFXPowerWheelIconPower m_oDragSlotIcon; //offset = 2448, size = 128
		m_srMaximizeText m_srMaximizeText; //offset = 2576, size = 4
		m_srMinimizeText m_srMinimizeText; //offset = 2580, size = 4
		Float m_fDragStartThreshold; //offset = 2584, size = 4

		void ExInt_CollapsePlayerWeapons();
		void SetQuickSlotIconSelected( Int nIconIndex, Bool bSelected );
		void doHotKey( Int nIndex );
		void LeaveQuickSlot( Int nSlotID );
		void HoverQuickSlot( Int nSlotID );
		void UpdateQuickSlotDisplay( Int nIcon );
		Bool HandleQuickSlotMouseDown( String sIconID, Int nSlot );
		void ExInt_IconMouseDown( String sIconID, Int nIcon, Byte eMode );
		Bool HandleQuickSlotMouseUp( String sIconID, Int nSlot );
		void ExInt_IconMouseUp( String sIconID, Int nIcon, Byte eMode );
		Bool HandleQuickSlotRollOut( String sIconID, Int nSlot );
		void ExInt_IconRollOut( String sIconID, Int nIcon, Byte eMode, Bool bIsPlayerID );
		Bool HandleQuickSlotRollOver( String sIconID, Int nSlot );
		void ExInt_IconRollOver( String sIconID, Int nIcon, Byte eMode, Bool bIsPlayerID, BioPawn* pPawn );
		Byte FindIconIndexFromPath( String sIconID, Int nFoundIcon, Int nIcon );
		void SetupQuickSlotPowers();
		void SetupQuickSlotKeys();
		void SetQuickSlotState( Bool bExpand, Bool bSkipTransition, Int nIcon );
		void SwapHenchmanWeapon( BioPawn* pHench, SFXInventoryManager* pInvManager, SFXWeapon* pWeapon, Int nIcon, SFXPowerWheelIconWeapon oWeaponIcon, Bool bSwitched );
		void ExpandPlayerWeapons();
		void ClosePlayerWeapons();
		void SelectWeapon( Int nWeaponIndex );
		void SetWeaponState( Int nWeapIndex, Byte eNewWeapState );
		void SortWeapons( BioPawn* pPawn, Array<SFXWeapon*> aWeapons, Int nWeap, SFXWeapon* pSwapWeap );
		void SetMapText( String sText1, Byte eIcon1, String sText2, Byte eIcon2 );
		void SetUseText( String sText );
		void WheelVisibilityChanged( Bool bVisible, Int nIcon );
		void InitDisplay();
		void OnAllowCameraRotation( Bool i_bValue );
		void CleanupReferences( Int nIcon );
		void RemoveHenchman( BioPawn* pPawn );
		void NewSetQuickSlotPower( Int nSlot, Int nDraggingIconID, Bool bDraggingPower, Bool bSilently );
	};

	enum ESFXPersonalizationOption
	{
		SFXPersOpt_Type,
		SFXPersOpt_Helmet,
		SFXPersOpt_Torso,
		SFXPersOpt_Shoulder,
		SFXPersOpt_Arm,
		SFXPersOpt_Leg,
		SFXPersOpt_Spec,
	};

	class SFXSFHandler_Personalization: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_Personalization, BioSFHandler, SFXGame )

	public:

		BioWorldInfo* m_WorldInfo; //offset = 104, size = 4
		SFXPawn_Player* m_oUIWorldPawn; //offset = 108, size = 4
		SFXPawn_Player* m_oPlayerPawn; //offset = 112, size = 4
		Int m_nRotating; //offset = 116, size = 4
		Float RotationDegreesPerSecond; //offset = 120, size = 4
		Bool m_bStopScroll: 1; //offset = 124, size = 4
		Int TypeOptionTitle; //offset = 128, size = 4
		Int HelmetOptionTitle; //offset = 132, size = 4
		Int TorsoOptionTitle; //offset = 136, size = 4
		Int ShoulderOptionTitle; //offset = 140, size = 4
		Int ArmOptionTitle; //offset = 144, size = 4
		Int LegOptionTitle; //offset = 148, size = 4
		Int SpecOptionTitle; //offset = 152, size = 4
		Int Tint1OptionTitle; //offset = 156, size = 4
		Int Tint2OptionTitle; //offset = 160, size = 4
		Int PatternOptionTitle; //offset = 164, size = 4
		Int PatternColorOptionTitle; //offset = 168, size = 4
		Int CasualOptionTitle; //offset = 172, size = 4
		Int CasualID; //offset = 176, size = 4
		Int FullBodyID; //offset = 180, size = 4
		Int TorsoID; //offset = 184, size = 4
		Int ShoulderID; //offset = 188, size = 4
		Int ArmID; //offset = 192, size = 4
		Int LegID; //offset = 196, size = 4
		Int Tint1ID; //offset = 200, size = 4
		Int Tint2ID; //offset = 204, size = 4
		Int PatternID; //offset = 208, size = 4
		Int PatternColorID; //offset = 212, size = 4
		Int HelmetID; //offset = 216, size = 4
		__ExternalCallback_OnComplete__Delegate __ExternalCallback_OnComplete__Delegate; //offset = 220, size = 12

		void onExIntDetailItemChange( Int nOptIndex, Int nOptionIndex, Array<ASParams> lstParams, ASParams stParam, Array<CustomizableElement> aChangedElement, SFXPawn_Player* pPawn, SFXShield_Base* oShields, Int nSelectionID, Int I );
		Int GetIdxByAppearanceID( Int Id, Array<CustomizableElement> AppearanceData, Int idx, Int I, Int J );
		Int GetAppearanceIDByIdx( Int Index, Array<CustomizableElement> AppearanceData, Int I );
		void onExIntSelectCategory( Int nCategory, SFXPawn_Player* pPawn, Array<CustomizableElement> BodyTypes, Int idx, CustomizableElement N7Armor, Int AppearanceID );
		void onExIntExit();
		void onExIntDoInitialize();
		void CancelChanges( SFXPawn_Player* oUIPawn );
		void ApplyChanges( SFXPawn_Player* oUIPawn, SFXEngine* oEngine );
		void AddDetailEntry( Int nEntryIndex, Int nTitleText, Array<CustomizableElement> Elements, Int nIndex, Array<ASParams> lstParams, Int nOpt, String sTemp, Bool bFirstElement );
		Bool IsAvailable( CustomizableElement Element );
		String GetCleanString( Int nStringRef );
		SFXPawn_Player* GetUIWorldPlayerPawn();
		void Update( Float fDeltaT, Rotator rotCurrentPreviewRotation );
		void HandleInputEvent( Byte Event, Float fValue, Array<ASParams> lstParams, ASParams aParam );
		void InitializeUIWorld( BioPlayerController* PC );
		void OnPanelRemoved();
		void OnPanelAdded();
		void ClearDelegates();
		void SetExternalCallback_OnComplete( pDelegate pDelegate );
		void ExternalCallback_OnComplete();
	};

	struct PRCInfo_t
	{
		String sCreditsSection; //offset = 0, size = 12
		Float fFadeTime; //offset = 12, size = 4
		Float fHoldTime; //offset = 16, size = 4
		Float fScrollTime; //offset = 20, size = 4
	};

	class SFXSFHandler_PRCShop: public BioSFHandler_ChoiceGUI
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PRCShop, BioSFHandler_ChoiceGUI, SFXGame )

	public:

		SFXGameChoiceGUIData_PRCShop* m_ChoiceDataNoStrRef; //offset = 212, size = 4
		Array<PRCInfo_t> PRCInfo; //offset = 216, size = 12

		void ShowChoiceGUI();
	};

	const char* CROSSHAIR_SMOOTHING_BUFFER = 3;

	enum SFXReticleCrosshair
	{
		SFXRC_None,
		SFXRC_Standard,
		SFXRC_HeavyWeapon,
	};

	class SFXSFHandler_Reticle: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_Reticle, BioSFHandler, SFXGame )

	public:

		Float m_fTimeSinceLastUpdate; //offset = 104, size = 4
		SFXCameraNativeBase* m_pCameraManager; //offset = 108, size = 4
		BioPlayerController* m_pPlayerController; //offset = 112, size = 4
		BioPlayerInput* m_pPlayerInput; //offset = 116, size = 4
		BioEpicPawnBehavior* m_pPlayerBehavior; //offset = 120, size = 4
		BioPlayerSquad* m_pPlayerSquad; //offset = 124, size = 4
		Bool m_bSelectionInvalidated: 1; //offset = 128, size = 4
		Bool m_fCacheTargetInSights: 1; //offset = 128, size = 4
		Bool m_bReticleVisible: 1; //offset = 128, size = 4
		Bool m_bShowHeavyDetails: 1; //offset = 128, size = 4
		Bool m_bShowSniperDetails: 1; //offset = 128, size = 4
		Float m_fCacheCrosshairRadius; //offset = 132, size = 4
		Float m_aCrosshairRawBuffer[3]; //offset = 136, size = 4
		Int m_nCrosshairBufferIndex; //offset = 148, size = 4
		Int m_nCacheWeaponAmmo; //offset = 152, size = 4
		Int m_nCacheSniperZoom; //offset = 156, size = 4
		Int m_nCacheSniperDistance; //offset = 160, size = 4
		Byte m_eCurrentCrosshair; //offset = 164, size = 1
		String m_aCrosshairPaths[4]; //offset = 168, size = 12
		Array<Actor*> m_aTargets; //offset = 216, size = 12
		Array<SFXSF_ReticleBase*> m_aReticles; //offset = 228, size = 12
		Float m_fSFWidth; //offset = 240, size = 4
		Float m_fSFHeight; //offset = 244, size = 4
		Float m_fScrn2SF_YOffset; //offset = 248, size = 4
		Float m_fScrn2SF_YScale; //offset = 252, size = 4
		Float m_fScrn2SF_XScale; //offset = 256, size = 4
		Int m_nMaxReticleDistance; //offset = 260, size = 4
		Float m_fUpdateInterval; //offset = 264, size = 4
		Float m_fSelectionBoxScalingFactor; //offset = 268, size = 4
		Float m_fScreenChangeDelta; //offset = 272, size = 4
		m_srDistanceUnit m_srDistanceUnit; //offset = 276, size = 4
		Float m_fCrosshairAccuracyModifier; //offset = 280, size = 4

		void ExInt_ReticleVisible();
		void ExInt_OutTransitionComplete( String sPath, Int nReticle );
		void ExInt_InTransitionComplete( String sPath );
		Int GetWeaponAmmo( Bool bClipOnly, SFXWeapon* oWeapon );
		String GetWeaponAmmoString( Bool bClipOnly, SFXWeapon* oWeapon, Int nAmmo );
		Byte GetDesiredCrosshairFromWeapon(, SFXWeapon* pWeapon );
		Float GetCrosshairRadius(, SFXInventoryManager* pInvManager );
		void Reset();
		void GameSessionEnded();
		void CleanupReferences();
		void OnPanelRemoved();
	};

	class SFXSFHandler_SavingDisplay: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_SavingDisplay, BioSFHandler, SFXGame )

	public:

		void OnPanelAdded();
		void PC_ShowSaveMessage();
		void HideSavingMessage( Bool bDoTransition );
		void ShowSavingMessage( Bool bDoTransition );
	};

	enum EBioLevelUp2DA
	{
		LEVEL_UP_2DA_LEVEL_UP,
		LEVEL_UP_2DA_RANK,
		LEVEL_UP_2DA_CHALLENGE_SCALING,
	};

	class BioLevelUpSystem: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioLevelUpSystem, BioBaseComponent, SFXGame )

	public:

		Name m_nmLevelUpPackageName; //offset = 68, size = 8
		Name m_aLevelUp2DANames[4]; //offset = 76, size = 8
		Bio2DA* m_aLevelUp2DA[4]; //offset = 108, size = 4
		Bool m_bDefault2DAsLoaded: 1; //offset = 124, size = 4

		void AutoLevelUpPowers( BioPawn* Pawn, SFXPowerLevelUpHelper* Helper );
		Bool AttemptLevelUp( BioPlayerSquad* Squad, Int NewPlayerLevel, Int PlayerLevel, Int XPForNextLevel, Int idx, Float CurrentXP, SFXPawn_Player* Pawn, BioPawn* Member );
		Bool ExperienceNeededForLevel( Int Level, Int experience );
		Int PointsForHenchLevelUp( Int oldLevel, Int newLevel );
		Bool LevelUpPawn( BioPawn* Pawn, Int newLevel );
	};

	class BioActorBehaviorSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioActorBehaviorSaveObject, BioBaseSaveObject, SFXGame )

	public:

		Bool m_bChallengeScaled: 1; //offset = 72, size = 4
		BioBaseSaveObject* Owner; //offset = 76, size = 4

		void LoadObject( Object* O, BioActorBehavior* Behavior );
		void SaveObject( Object* O, BioActorBehavior* Behavior );
	};

	class BioArtPlaceableSaveObject: public BioActorSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableSaveObject, BioActorSaveObject, SFXGame )

	public:

		Bool LoadPositionAndOrientation( Actor* O );
		Bool SavePositionAndOrientation( Actor* O );
	};

	class BioEpicPawnBehaviorSaveObject: public BioActorBehaviorSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioEpicPawnBehaviorSaveObject, BioActorBehaviorSaveObject, SFXGame )

	public:

		String m_FirstName; //offset = 80, size = 12
		m_LastName m_LastName; //offset = 92, size = 4
		Float m_fRadarRange; //offset = 96, size = 4

		void LoadObject( Object* O, BioEpicPawnBehavior* Pawn );
		void SaveObject( Object* O, BioEpicPawnBehavior* Pawn );
	};

	class BioInterfaceAppearanceSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioInterfaceAppearanceSaveObject, BioBaseSaveObject, SFXGame )

	public:

		BioBaseSaveObject* m_oMorphFace; //offset = 72, size = 4
		BioMorphFace* m_pFaceAsset; //offset = 76, size = 4
	};

	class BioLevelSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioLevelSaveObject, BioBaseSaveObject, SFXGame )

	public:

		Array<BioBaseSaveObject*> m_LevelObjects; //offset = 72, size = 12
		Array<String> m_lstDestroyedObjects; //offset = 84, size = 12

		void SaveDestroyedObjects( Object* O );
		void DestroyObject( Object* O );
		void LoadObject( Object* O, Int I, Object* oDestroy );
		void SaveObject( Object* O );
	};

	class BioPawnBehaviorSaveObject: public BioEpicPawnBehaviorSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioPawnBehaviorSaveObject, BioEpicPawnBehaviorSaveObject, SFXGame )

	public:

		Int m_XPLevel; //offset = 100, size = 4
		Byte m_Gender; //offset = 104, size = 1
		Byte m_Race; //offset = 105, size = 1
		Byte m_ClassBase; //offset = 106, size = 1
		Byte m_SpectreRank; //offset = 107, size = 1
		Byte m_BackgroundOrigin; //offset = 108, size = 1
		Byte m_BackgroundNotoriety; //offset = 109, size = 1
		BioBaseSaveObject* m_Squad; //offset = 112, size = 4
		Array<BioSimpleTalentSave> m_aSimpleTalents; //offset = 116, size = 12
		Array<BioComplexTalentSave> m_aComplexTalents; //offset = 128, size = 12
		Int m_Experience; //offset = 140, size = 4
		Int m_TalentPoolPoints; //offset = 144, size = 4
		m_LocalizedClassName m_LocalizedClassName; //offset = 148, size = 4
		Int m_AutoLevelUpTemplateID; //offset = 152, size = 4
		Int m_SpecializationBonusID; //offset = 156, size = 4
		Float m_SkillCharm; //offset = 160, size = 4
		Float m_SkillIntimidate; //offset = 164, size = 4
		Float m_SkillHaggle; //offset = 168, size = 4
		Int m_ResourcesCredits; //offset = 172, size = 4
		Int m_ResourcesMedigel; //offset = 176, size = 4
		Float m_DamageDurationMult; //offset = 180, size = 4
		Bool m_bHeadGearVisiblePreference: 1; //offset = 184, size = 4
		Int m_TalentPoints; //offset = 188, size = 4

		void LoadObject( Object* O, BioPawnBehavior* oBehave, BioAttributesPawn* PawnAttributes, BioAttributesPawnParty* PawnPartyAttributes, BioAttributesPawnPlayer* PawnPlayerAttributes, Int nAmtIncrease, SFXInventoryManager* oInventory );
		void SaveObject( Object* O, BioPawnBehavior* oBehave, BioAttributesPawn* PawnAttributes, BioAttributesPawnParty* PawnPartyAttributes, BioAttributesPawnPlayer* PawnPlayerAttributes );
	};

	struct SaveGameRecord
	{
		String m_filename; //offset = 0, size = 12
		String m_saveName; //offset = 12, size = 12
		String m_saveNameShort; //offset = 24, size = 12
		Int m_sec; //offset = 36, size = 4
		Int m_Min; //offset = 40, size = 4
		Int m_hr; //offset = 44, size = 4
		Int m_day; //offset = 48, size = 4
		Int m_mo; //offset = 52, size = 4
		Int m_year; //offset = 56, size = 4
		Int m_secPlayed; //offset = 60, size = 4
		Int m_minPlayed; //offset = 64, size = 4
		Int m_hrPlayed; //offset = 68, size = 4
		String m_charId; //offset = 72, size = 12
		Int m_ClassId; //offset = 84, size = 4
		Int m_CharcterLevel; //offset = 88, size = 4
		Bool m_bCanDelete: 1; //offset = 92, size = 4
		Int m_DeviceId; //offset = 96, size = 4
		Int m_SaveGameNumber; //offset = 100, size = 4
		Bool m_bIsAutoSave: 1; //offset = 104, size = 4
		Bool m_bIsQuickSave: 1; //offset = 104, size = 4
	};

	struct BioComplexTalentSave
	{
		Int m_TalentID; //offset = 0, size = 4
		Int m_Ranks; //offset = 4, size = 4
		Int m_MaxRank; //offset = 8, size = 4
		Int m_LevelOffset; //offset = 12, size = 4
		Int m_LevelsPerRank; //offset = 16, size = 4
		Int m_VisualOrder; //offset = 20, size = 4
		Array<Int> m_PrereqTalentIDArray; //offset = 24, size = 12
		Array<Int> m_PrereqTalentRankArray; //offset = 36, size = 12
	};

	struct BioSimpleTalentSave
	{
		Int m_TalentID; //offset = 0, size = 4
		Int m_Ranks; //offset = 4, size = 4
	};

	struct PlayerInfoEx
	{
		Class* CharacterClass; //offset = 0, size = 4
		Bool bIsFemale: 1; //offset = 4, size = 4
		String FirstName; //offset = 8, size = 12
		Byte Origin; //offset = 20, size = 1
		Byte Notoriety; //offset = 21, size = 1
		BioMorphFace* MorphHead; //offset = 24, size = 4
		String BonusTalentClass; //offset = 28, size = 12
		String FaceCode; //offset = 40, size = 12
	};

	class BioSaveGame: public Object
	{
		DECLARE_PACKAGE_CLASS( BioSaveGame, Object, SFXGame )

	public:

		SFXLegacyData* ImportedDataManager; //offset = 60, size = 4
		String m_sMapName; //offset = 64, size = 12
		BioBaseSaveObject* m_Player; //offset = 76, size = 4
		BioBaseSaveObject* m_PlayerController; //offset = 80, size = 4
		BioBaseSaveObject* MorphHead; //offset = 84, size = 4
		PlayerInfoEx NewPlayer; //offset = 88, size = 52
		PlayerInfoEx DefaultPlayer; //offset = 140, size = 52
		Bool bNewPlayer: 1; //offset = 192, size = 4
		Bool m_UseDesiredStartPoint: 1; //offset = 192, size = 4
		Bool bStartedGame: 1; //offset = 192, size = 4
		Bool m_bInvalidSaveFileCreator: 1; //offset = 192, size = 4
		Package* m_PlayerPackage; //offset = 196, size = 4
		Name m_DesiredStartPoint; //offset = 200, size = 8
		Vector m_DesiredPosition; //offset = 208, size = 12
		Array<Int> m_DependentDLC; //offset = 220, size = 12
		Array<String> m_DependentPackages; //offset = 232, size = 12

		Bool LoadPlayer( BioPawn* Player );
		void SavePlayerParty( BioPlayerController* PlayerController, Package* savePackage, BioPawnBehavior* playerBehavior );
		void LoadObjectPosition( BioBaseSaveObject* Save, Actor* Obj, BioActorBehaviorSaveObject* savedBehavior, BioActorSaveObject* SaveObject );
		BioPawnBehaviorSaveObject* GetPlayerSaveObject();
		void ResetToDefaults();
		Package* GetPlayerPackage();
	};

	class BioVehicleSaveObject: public BioActorSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioVehicleSaveObject, BioActorSaveObject, SFXGame )

	public:

		void LoadObject( Object* O );
		void SaveObject( Object* O );
		Bool LoadPositionAndOrientation( Actor* O );
		Bool SavePositionAndOrientation( Actor* O );
	};

	class BioWorldInfoSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioWorldInfoSaveObject, BioBaseSaveObject, SFXGame )

	public:

		Array<WorldStreamingState> m_WorldStreamingStates; //offset = 72, size = 12
		Array<String> m_lstCinematicsSeen; //offset = 84, size = 12
		String m_sDestinationAreaMap; //offset = 96, size = 12
		Vector m_vDestination; //offset = 108, size = 12
		Array<Int> m_pScannedClusters; //offset = 120, size = 12
		Array<Int> m_pScannedSystems; //offset = 132, size = 12
		Array<Int> m_pScannedPlanets; //offset = 144, size = 12
		Byte m_nJournalSortMethod; //offset = 156, size = 1
		Byte m_lstBrowserAlerts[9]; //offset = 157, size = 1
		Bool m_bJournalShowingMissions: 1; //offset = 168, size = 4
		Bool m_bCodexShowingPrimary: 1; //offset = 168, size = 4
		Int m_nJournalLastSelectedMission; //offset = 172, size = 4
		Int m_nJournalLastSelectedAssignment; //offset = 176, size = 4
		Int m_nCodexLastSelectedPrimary; //offset = 180, size = 4
		Int m_nCodexLastSelectedSecondary; //offset = 184, size = 4
		Int m_nCurrentTipID; //offset = 188, size = 4
		m_OverrideTip m_OverrideTip; //offset = 192, size = 4

		void LoadObject( Object* O );
		void SaveObject( Object* O );
	};

	struct LevelLookup
	{
		String m_Name; //offset = 0, size = 12
		BioLevelSaveObject* m_Save; //offset = 12, size = 4
	};

	class BioWorldSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioWorldSaveObject, BioBaseSaveObject, SFXGame )

	public:

		Array<LevelLookup> m_Levels; //offset = 72, size = 12
		BioBaseSaveObject* m_WorldInfoSave; //offset = 84, size = 4

		BioLevelSaveObject* GetLevelSaveObject( String LevelName, Bool bRemove, Int Index, BioLevelSaveObject* ret );
	};

	const char* ME1_FullRenegadeBarValue = 24;
	const char* ME1_FullParagonBarValue = 24;
	const char* ME1_Light_Content_Subplots_SP122_CerberusTheTest_Heard_of_Cerberus = 588;
	const char* ME1_Light_Content_Subplots_SP124_CerberusFinale_Found_Files = 460;
	const char* ME1_Light_Content_Subplots_SP102_MonkeyFun_UNC84_Light_Content_Microplot_EasterEgg = 701;
	const char* ME1_DLC_UNC_UNC52_Plot_Finished_Humans_Rescued = 731;
	const char* ME1_Light_Content_Subplots_SP120_Survivors_Revenge_Quest_Complete_Killed_Scientist = 503;
	const char* ME1_Light_Content_Subplots_SP120_Survivors_Revenge_Quest_Complete_Convinced_Soldier = 503;
	const char* ME1_Light_Content_Subplots_SP111_Hostage_Situation_Situation_Resolved_Biotics_surrendered = 488;
	const char* ME1_Light_Content_Subplots_SP111_Hostage_Situation_Situation_Resolved_Killed_Biotics = 488;
	const char* ME1_Light_Content_Subplots_SP111_Hostage_Situation_chairman_died = 488;
	const char* ME1_CH2_Noveria_ICE_60_Conversation_Flags_Han_Olar_Talked_Once = 386;
	const char* ME1_CH2_Noveria_Leaving_Hanshan_Port_Kickbacks_Kickbacks_Complete_Evidence_to_Lorik = 268;
	const char* ME1_CH2_Feros_Frontier_Lost_Colony_Outcome_Renegade = 625;
	const char* ME1_CH2_Feros_Frontier_Lost_Colony_Outcome_Give_Fail = 638;
	const char* ME1_CH2_Feros_Frontier_Lost_Colony_Outcome_Give_Good = 625;
	const char* ME1_CH2_Feros_Frontier_Lost_Colony_Outcome_Give_Good_Plus = 625;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP113_Memories_of_Green_Plot_Complete_Killed_Finch = 485;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP113_Memories_of_Green_Met_Finch = 484;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP112_I_Remember_Me_Resolved_Bait_and_Switch = 486;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP112_I_Remember_Me_Resolved_Talked_Her_Down = 486;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP111_Drink_Before_the_War_Spoke_to_Mom = 492;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP110_In_Flanders_Fields_Quest_Complete_Got_Body = 482;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP105a_Expose_Quest_Completed_Gave_Info = 494;
	const char* ME1_CH1_Star_Citadel_Keeper_Secret_Chorban_dealt_with_Scared_Off = 388;
	const char* ME1_CH1_Star_Citadel_Keeper_Secret_Chorban_dealt_with_Killed = 388;
	const char* ME1_CH1_Star_Citadel_Keeper_Secret_Scan_the_Keepers_NumKeepersScanned = 39;
	const char* ME1_CH1_Star_Citadel_Keeper_Secret_Scan_the_Keepers_Accepted_Quest_Chorbin_Gave_Quest = 692;
	const char* ME1_CH1_Star_Citadel_Doctor_Michel_Black_Mailer_Dealt_With_Killed = 387;
	const char* ME1_CH1_Star_Citadel_Doctor_Michel_Black_Mailer_Dealt_With_Persuaded = 387;
	const char* ME1_CH1_Star_Citadel_Asari_Companion_Plot_Complete = 585;
	const char* ME1_Global_Plots_Renegade_Points = 46;
	const char* ME1_Global_Plots_Paragon_Points = 47;
	const char* ME1_Global_Plots_Achievements_Rich = 715;
	const char* ME1_Utility_Henchman_InParty_Krogan = 394;
	const char* ME1_Light_Content_Subplots_SP109_Hostile_Takeover_Quest_Complete_Persuaded_Criminal = 501;
	const char* ME1_Light_Content_Subplots_SP109_Hostile_Takeover_Quest_Complete_Accepted_Money = 501;
	const char* ME1_Light_Content_Subplots_SP108_SlaverQueen_Player_knows_about_plot = 462;
	const char* ME1_Light_Content_Subplots_SP108_SlaverQueen_Player_Killed_Sister = 684;
	const char* ME1_Global_Plots_QMLicenses_mfcl_all_elkoss = 716;
	const char* ME1_CH4_Star_Citadel_Final_Choice_Game_Complete = 653;
	const char* ME1_CH4_Star_Citadel_Final_Choice_Chose_ambassador = 543;
	const char* ME1_CH4_Star_Citadel_Final_Choice_Choice_Is_Made_Destroy_the_Council = 300;
	const char* ME1_CH4_Star_Citadel_Final_Choice_Choice_Is_Made_Save_the_Council = 300;
	const char* ME1_CH4_Star_Citadel_Final_Choice_Chose_Anderson = 543;
	const char* ME1_CH2_Virmire_Krogan_conundrum_Failure_Failure_KilledBy_Player = 302;
	const char* ME1_CH2_Virmire_Infiltration_70_PsyranaDead = 605;
	const char* ME1_CH2_Virmire_Incursion_40_jug40_captainupdate_GethFlyers_Reported = 445;
	const char* ME1_CH2_Virmire_Incursion_40_GethFlyers_Disabled = 446;
	const char* ME1_CH2_Virmire_The_Choice_Rescued_Ash = 382;
	const char* ME1_CH2_Virmire_Krogan_conundrum_Failure_Failure_AshKilledWithoutPermission = 554;
	const char* ME1_CH2_Virmire_Krogan_conundrum_Failure_Failure_KilledBy_Ashley = 302;
	const char* ME1_CH2_Virmire_The_Choice_Rescued_Kaidan = 382;
	const char* ME1_CH2_Noveria_Rachni_Queen_Queen_Dealt_With_Queen_Released = 258;
	const char* ME1_CH2_Noveria_Leaving_Hanshan_Port_Kickbacks_Kickbacks_Complete_Evidence_to_Gianna = 269;
	const char* ME1_CH2_Noveria_Leaving_Hanshan_Port_Betray_Gianna_Player_Betrayed = 271;
	const char* ME1_CH2_Feros_Frontier_Lost_asari_fate_decided_Killed_Asari = 379;
	const char* ME1_CH2_Feros_Frontier_Lost_asari_decided = 413;
	const char* ME1_CH2_Feros_The_Company_Man_GOOD_PLUS = 249;
	const char* ME1_CH2_Feros_The_Company_Man_GOOD = 249;
	const char* ME1_CH2_Feros_Frontier_Lost_Too_Many_Killed = 251;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP102_Fan_Had_Last_Conversation = 491;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP102_Fan_Had_Last_Conversation_Final_Go_Away = 491;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP102_Fan_Had_Last_Conversation_Convinced_Verner = 491;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP102_Fan_Had_First_Conversation = 473;
	const char* ME1_CH1_Star_Citadel_Find_the_Quarian_Fist_LetGo = 727;
	const char* ME1_CH1_Star_Citadel_Asari_Companion_Received_Boon = 403;
	const char* ME1_CH1_Star_Citadel_FIRST_TIME_TALKED_TO_Harkin = 397;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP103_Fourth_Estate_Interview_Closed_Refused_Interview = 476;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP103_Fourth_Estate_Interview_Closed_Excused_Himself = 476;
	const char* ME1_CH1_Star_Citadel_Roleplaying_Plots_RP103_Fourth_Estate_Interview_Closed_Shepards_Punch_Out = 476;
	const char* ME1_Global_Plots_Henchman_Tali_Tali_plot_complete = 459;
	const char* ME1_Utility_PlayerInfo_Reputation = 2;
	const char* ME1_Global_Plots_Henchman_Liara_Romance_Buddy_dialog_count = 16;
	const char* ME1_Global_Plots_Henchman_Kaidan_Romance_Buddy_dialog_count = 15;
	const char* ME1_Utility_Henchman_InParty_Turian = 394;
	const char* ME1_Global_Plots_Henchman_Garrus_Making_Garrus_Renegade = 38;
	const char* ME1_Global_Plots_Henchman_Garrus_Making_Garrus_Paragon = 37;
	const char* ME1_Utility_PlayerInfo_Childhood = 1;
	const char* ME1_Global_Plots_Romance_State_Romance_State = 652;
	const char* ME1_Global_Plots_Henchman_Ash_Romance_Buddy_dialog_count = 17;

	struct SFXLegacyTalentSave
	{
		Int m_TalentID; //offset = 0, size = 4
		Int m_Ranks; //offset = 4, size = 4
	};

	class SFXLegacyData: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXLegacyData, Object, SFXGame )

	public:

		Bool m_bImportedData: 1; //offset = 60, size = 4
		Bool m_bImportAllowed: 1; //offset = 60, size = 4
		Bool m_LDC_bDeviceSelectionCanceled: 1; //offset = 60, size = 4
		Bool m_bImportStartPausedForMissingDevice: 1; //offset = 60, size = 4
		Bool m_AchievementRich: 1; //offset = 60, size = 4
		Package* m_PlayerPackage; //offset = 64, size = 4
		String m_LDC_Filename; //offset = 68, size = 12
		Name m_LDC_sCallbackFunction; //offset = 80, size = 8
		Name m_LDC_sCallbackFunctionCanceled; //offset = 88, size = 8
		Array<String> m_lstDependentPackages; //offset = 96, size = 12
		BioGlobalVariableTable* m_oImportedGlobalVariables; //offset = 108, size = 4
		BioQuestProgressionMap* m_oQuestProgress; //offset = 112, size = 4
		BioDiscoveredCodexMap* m_oDiscoveredCodex; //offset = 116, size = 4
		Int m_XPLevel; //offset = 120, size = 4
		Byte m_Gender; //offset = 124, size = 1
		Byte m_Race; //offset = 125, size = 1
		Byte m_ClassBase; //offset = 126, size = 1
		Byte m_SpectreRank; //offset = 127, size = 1
		Byte m_BackgroundOrigin; //offset = 128, size = 1
		Byte m_BackgroundNotoriety; //offset = 129, size = 1
		m_LocalizedClassName m_LocalizedClassName; //offset = 132, size = 4
		Int m_TalentPoints; //offset = 136, size = 4
		Int m_TalentPoolPoints; //offset = 140, size = 4
		Int m_Experience; //offset = 144, size = 4
		Int m_ParagonPoints; //offset = 148, size = 4
		Int m_RenegadePoints; //offset = 152, size = 4
		Int m_SkillCharm; //offset = 156, size = 4
		Int m_SkillIntimidate; //offset = 160, size = 4
		Int m_SkillHaggle; //offset = 164, size = 4
		Int m_SpecializationBonusID; //offset = 168, size = 4
		Array<SFXLegacyTalentSave> m_lstSimpleTalents; //offset = 172, size = 12
		String m_PlayerFirstName; //offset = 184, size = 12
		String MaleBaseFace; //offset = 196, size = 12
		String FemaleBaseFace; //offset = 208, size = 12
		Float ME2Bonus_Experience; //offset = 220, size = 4
		Int ME2Bonus_StartingLevel; //offset = 224, size = 4
		Float ME2Bonus_Credits; //offset = 228, size = 4
		Float ME2Bonus_RichAchievementCredits; //offset = 232, size = 4
		Float ME2Bonus_Resources; //offset = 236, size = 4
		Float ME2Bonus_Paragon; //offset = 240, size = 4
		Float ME2Bonus_Renegade; //offset = 244, size = 4

		Float GetRenegadeBarPercentFull();
		Float GetParagonBarPercentFull();
		void ApplyME1PlotStates( BioWorldInfo* oBWI, BioGlobalVariableTable* oIV, BioGlobalVariableTable* oGV );
		Int GetImportedPlayerSpecialization();
		Byte GetImportedPlayerNotoriety();
		Byte GetImportedPlayerOrigin();
		Byte GetImportedPlayerClass();
		Byte GetImportedPlayerGender();
		Int GetImportedPlayerLevel();
		String GetImportedPlayerName();
		Bool ImportedPowerExists( Int nPowerID, Int nNull );
		Bool GetImportedPowerRanks( Int nPowerID, Int nRanks, Int I );
		Bool GetImportedPlotFloat( Int nIndex, Float fRet, String sNameOfRequiredContent );
		Bool GetImportedPlotInt( Int nIndex, Int nRet, String sNameOfRequiredContent );
		Bool GetImportedPlotBool( Int nIndex, Int nRet, String sNameOfRequiredContent );
		Bool VerifyPRCRequirement( String sNameOfRequiredContent, Int I );
		void RetrievePRCScopeFromSaveObject( BioSaveGame* oBSGImportObj );
		Bool ApplyImportedMorphFaceFromSaveObject( Object* oMorphImportObj, BioWorldInfo* bioWorld, BioMorphFace* oLegacyFace );
		void InitializeSpawnableImportedPlayer( BioWorldInfo* bioWorld, BioGlobalVariableTable* oGV );
		void ClearCurrentData();
	};

	enum EBioSkillGameDifficulty
	{
		SKILL_GAME_DIFFICULTY_EASY,
		SKILL_GAME_DIFFICULTY_MEDIUM,
	};

	enum EBioSkillGame
	{
		SKILL_GAME_DECRYPTION,
		SKILL_GAME_ELECTRONICS,
	};

	class BioSkillGame: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioSkillGame, BioBaseComponent, SFXGame )

	public:

		Name m_nmSkillGamePackageName; //offset = 68, size = 8
		Name m_nmSkillGame2DAName; //offset = 76, size = 8
		Bio2DA* m_SkillGame2DA; //offset = 84, size = 4
		Bool m_bDefault2DAsLoaded: 1; //offset = 88, size = 4
		Bool m_bSalvageCheckParam: 1; //offset = 88, size = 4
		BioPawn* m_oUsingPawn; //offset = 92, size = 4
		Object* m_oDependent; //offset = 96, size = 4
		Byte m_nSkillGameType; //offset = 100, size = 1
		Int m_nMinSalvage; //offset = 104, size = 4
		Int m_nMaxSalvage; //offset = 108, size = 4
		Int m_nTotalButtonsToDisplay; //offset = 112, size = 4
		Float m_fButtonTimeout; //offset = 116, size = 4
		Float m_fButtonDelayTime; //offset = 120, size = 4
		m_GameMessageSuccess m_GameMessageSuccess; //offset = 124, size = 4
		m_GameMessageFailure m_GameMessageFailure; //offset = 128, size = 4
		m_GameMessageDuringGame m_GameMessageDuringGame; //offset = 132, size = 4
		m_preGameButtonAText m_preGameButtonAText; //offset = 136, size = 4
		m_preGameButtonBText m_preGameButtonBText; //offset = 140, size = 4
		m_preGameButtonXText m_preGameButtonXText; //offset = 144, size = 4

		void InitializeObject();
		void InitializeSkillGameStringReferences( i_GameMessageSuccess i_GameMessageSuccess, i_GameMessageFailure i_GameMessageFailure, i_GameMessageDuringGame i_GameMessageDuringGame, i_preGameButtonAText i_preGameButtonAText, i_preGameButtonBText i_preGameButtonBText, i_preGameButtonXText i_preGameButtonXText );
		void CallbackSkillGame();
		Bool InitializeSkillGameCustom( BioPawn* oUsingPawn, Object* oDependent, Byte nSkillGameType, Int nTotalButtonsToDisplay, Float fButtonTimeout, Float fButtonDelayTime, Name nmFunctionSuccessCallback, Name nmFunctionFailureCallback, Name nmFunctionCancelCallback, Bool i_bDoNotUseSalvage );
		Bool InitializeSkillGame( BioPawn* oUsingPawn, Object* oDependent, Byte nSkillGameType, Int nTotalButtonsToDisplay, Float fButtonTimeout, Float fButtonDelayTime );
		Pawn* GetBestSkillMember( Byte eSkillGameType, BioBaseSquad* oInputSquad, Int nBestSkillLevel );
	};

	class BioCustomAction: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction, Object, SFXGame )

	public:

		BioPawn* oPawn; //offset = 60, size = 4
		Float SpeedModifier; //offset = 64, size = 4
		Bool bLockPawnRotation: 1; //offset = 68, size = 4
		Bool bBreakFromCover: 1; //offset = 68, size = 4
		Bool bDisableMovement: 1; //offset = 68, size = 4
		Bool bDisableLook: 1; //offset = 68, size = 4
		Bool bDisableCollision: 1; //offset = 68, size = 4
		Bool bDisablePhysics: 1; //offset = 68, size = 4
		Bool bDisableLeftHandIK: 1; //offset = 68, size = 4
		Bool bIgnoreDamage: 1; //offset = 68, size = 4
		Bool bNotifyKnockedOutOfCover: 1; //offset = 68, size = 4
		Bool bCameraFocusOnPawn: 1; //offset = 68, size = 4
		Bool bLastCanDoCustomAction: 1; //offset = 68, size = 4
		Bool bIgnoreInputForCustomAction: 1; //offset = 68, size = 4
		Bool bReachPreciseDestination: 1; //offset = 68, size = 4
		Bool bReachedPreciseDestination: 1; //offset = 68, size = 4
		Bool bReachPreciseRotation: 1; //offset = 68, size = 4
		Bool bReachedPreciseRotation: 1; //offset = 68, size = 4
		Bool bForcePrecisePosition: 1; //offset = 68, size = 4
		Float LastCanDoCustomActionTime; //offset = 72, size = 4
		Vector PreciseDestination; //offset = 76, size = 12
		Float PreciseRotationInterpolationTime; //offset = 88, size = 4
		Rotator PreciseRotation; //offset = 92, size = 12
		Byte VocalizationEvent; //offset = 104, size = 1

		void TickCustomAction( Float fDeltaTime );
		void PlayForceFeedback( ForceFeedbackWaveform* FF, SFXPlayerController* PC );
		void PlayScreenShake( ScreenShakeStruct Shake, SFXPlayerController* PC );
		void RootMotionExtracted( SkeletalMeshComponent* SkelComp, BoneAtom ExtractedRootMotionDelta );
		void RootMotionModeChanged( SkeletalMeshComponent* SkelComp );
		void TogglePawnCollision( Bool bToggleOn );
		void ReachedPrecisePosition();
		void SetFacePreciseRotation( Rotator RotationToFace, Float InterpolationTime );
		void SetReachPreciseDestination( Vector DestinationToReach );
		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void AnimNotify( AnimNodeSequence* SeqNode, BioAnimNotify_CustomAction* NotifyObject );
		Bool NotifyHitWall( Vector HitNormal, Actor* Wall );
		Bool NotifyBump( Actor* Other, Vector HitNormal );
		void PawnLeftCover();
		void ContinueCustomAction();
		void PauseCustomAction();
		void StopCustomAction( BioPlayerController* PlayerController );
		void StartCustomAction( BioPlayerController* PlayerController, SFXAI_Core* AIController, Bool bForceRotation, Bool bWasInCover );
		Bool InternalCanDoCustomAction();
		Bool CanDoCustomAction();
	};

	enum EKroganChargeActions
	{
		EKC_Start,
		EKC_Miss,
	};

	class BioCustomAction_KroganCharge: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_KroganCharge, BioCustomAction, SFXGame )

	public:

		BodyStance BS_Start; //offset = 108, size = 12
		BodyStance BS_Miss; //offset = 120, size = 12
		BodyStance BS_Hit; //offset = 132, size = 12
		Byte m_ChargeAction; //offset = 144, size = 1
		Byte m_NextAction; //offset = 145, size = 1
		Actor* m_oChargeTarget; //offset = 148, size = 4
		Array<Actor*> m_oHitTargets; //offset = 152, size = 12
		Bool m_bHitTarget: 1; //offset = 164, size = 4

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime, BodyStance Stance );
		void StopCustomAction( BodyStance Stance, Float fBlendOutTime );
		void StartCustomAction();
		Bool PlayHitAnim( Actor* oHitTarget );
		BodyStance GetBodyStance( Byte eAction );
	};

	struct UnlockRequirement
	{
		Class* PowerClass; //offset = 0, size = 4
		Float Rank; //offset = 4, size = 4
		CustomUnlockText CustomUnlockText; //offset = 8, size = 4
	};

	struct RankInfo
	{
		Int Icon; //offset = 0, size = 4
		Name Name; //offset = 4, size = 4
		Description Description; //offset = 8, size = 4
		unlockBlurb unlockBlurb; //offset = 12, size = 4
	};

	class SFXPower: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXPower, Object, SFXGame )

	public:

		Name PowerName; //offset = 60, size = 8
		Name BaseName; //offset = 68, size = 8
		DisplayName DisplayName; //offset = 76, size = 4
		Description Description; //offset = 80, size = 4
		ImpactText ImpactText; //offset = 84, size = 4
		Int Icon; //offset = 88, size = 4
		AnimSet* Animations; //offset = 92, size = 4
		BioPowerVFXAppearance* VFX; //offset = 96, size = 4
		Vector2D CastingTime; //offset = 100, size = 8
		Float ReleasePlayRate; //offset = 108, size = 4
		Vector2D CooldownTime; //offset = 112, size = 8
		Vector2D GlobalCooldownTime; //offset = 120, size = 8
		Float DynamicCooldownBonus; //offset = 128, size = 4
		Bool UsesSharedCooldown: 1; //offset = 132, size = 4
		Bool BlockedByObjects: 1; //offset = 132, size = 4
		Bool AimingIgnoresObstructions: 1; //offset = 132, size = 4
		Bool StopOnFirstHit: 1; //offset = 132, size = 4
		Bool CanMoveWhileCasting: 1; //offset = 132, size = 4
		Bool DisplayInHUD: 1; //offset = 132, size = 4
		Bool AISelectable: 1; //offset = 132, size = 4
		Bool IsHenchmenUnique: 1; //offset = 132, size = 4
		Bool DisplayInCharacterRecord: 1; //offset = 132, size = 4
		Vector2D MinimumRange; //offset = 136, size = 8
		Vector2D MaximumRange; //offset = 144, size = 8
		Array<Float> ImpactRadius; //offset = 152, size = 12
		Array<Float> EffectDuration; //offset = 164, size = 12
		Float DynamicDurationBonus; //offset = 176, size = 4
		Array<Float> Damage; //offset = 180, size = 12
		Float DynamicDamageBonus; //offset = 192, size = 4
		Array<Float> Force; //offset = 196, size = 12
		Vector2D VFXIntensity; //offset = 208, size = 8
		Vector2D ProjectileSpeed; //offset = 216, size = 8
		Vector2D ProjectileRadius; //offset = 224, size = 8
		Vector2D ConeHalfAngle; //offset = 232, size = 8
		Float Rank; //offset = 240, size = 4
		Float MaxRank; //offset = 244, size = 4
		Byte PowerType; //offset = 248, size = 1
		Byte CapabilityType; //offset = 249, size = 1
		Byte Discipline; //offset = 250, size = 1
		Byte VocalizationEvent; //offset = 251, size = 1
		Class* PowerScriptClass; //offset = 252, size = 4
		Class* ProjectileClass; //offset = 256, size = 4
		Float DelayBeforeFirstUse; //offset = 260, size = 4
		Float DelayBetweenUses; //offset = 264, size = 4
		Float TimeUntilNextUse; //offset = 268, size = 4
		Class* EvolvedPowerClass1; //offset = 272, size = 4
		Class* EvolvedPowerClass2; //offset = 276, size = 4
		TalentDescription TalentDescription; //offset = 280, size = 4
		Array<RankInfo> Ranks; //offset = 284, size = 12
		Array<Int> RankCosts; //offset = 296, size = 12
		Array<UnlockRequirement> UnlockRequirements; //offset = 308, size = 12
		Int WheelDisplayIndex; //offset = 320, size = 4
		BioPawn* MyPawn; //offset = 324, size = 4
		BioPower* OldPower; //offset = 328, size = 4

		void RecalculateCooldownBonus( SFXModule_GameEffectManager* Manager );
		void Tick( Float fDeltaTime );
		Float GetDifficultyDurationMultiplier();
		void RecalculateDurationBonus( SFXModule_GameEffectManager* Manager );
		void GetDurationResearchBonus( Float fStaticDamageBonus );
		Float GetDuration(, Float fDuration, Float fStaticBonus );
		Float GetForce();
		void RecalculateDamageBonus( SFXModule_GameEffectManager* Manager );
		void GetDamageResearchBonus( Float fStaticDamageBonus );
		Float GetDamage(, Float fDamage, Float fStaticBonus );
		void ProcessToken( Int nRankIndex, String sToken );
		Bool ParseString( Int nRankIndex, String sParsedString );
		Bool GetParsedString( srValue srValue, Int nRankIndex, String sOutput );
		Bool GetUnlockBlurb( Int nRankIndex, String sUnlockBlurb );
		Bool GetDescription( Int nRankIndex, String sDescription );
		Bool IsSuppressed();
		Bool IsEnabled();
		Float GetTotalCooldownTime();
		Float GetCooldownRemaining();
		BioPowerScript* GetPowerScript();
		Bool IsTargetInRange( Actor* Target );
		void GetUnlockDetails( String sUnlockDetails );
		void GetStringFromStringRef( TheStringRef TheStringRef, String TheString, Bool bParse, Int nParseIndex );
		Float GetArrayValue( Array<Float> ArrayValues, Int nRankToUse );
		Float GetScaledValue( Vector2D ValueToScale, Int nRankToUse );
	};

	struct PowerSaveInfo
	{
		Name PowerName; //offset = 0, size = 8
		Float CurrentRank; //offset = 8, size = 4
		String PowerClassName; //offset = 12, size = 12
		Int WheelDisplayIndex; //offset = 24, size = 4
	};

	class SFXPowerManager: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXPowerManager, Object, SFXGame )

	public:

		BioPawn* MyPawn; //offset = 60, size = 4
		Array<SFXPower*> Powers; //offset = 64, size = 12
		RankUnlockText RankUnlockText; //offset = 76, size = 4
		RequiredUnlockText RequiredUnlockText; //offset = 80, size = 4
		Int PassiveRankIcon; //offset = 84, size = 4
		Int LockedRankIcon; //offset = 88, size = 4
		Int UnlockedRankIcon; //offset = 92, size = 4
		Int EvolveRank; //offset = 96, size = 4
		Float m_fSharedCooldownRemaining; //offset = 100, size = 4
		Float m_fSharedCooldownTotal; //offset = 104, size = 4

		Int GetRefundAmount2( Class* Power, Int Rank, Int Refund, Int Index );
		Int GetRefundAmount( SFXPower* Power );
		void RefundAllTalentPoints( Int nIndex, Int nRankIndex, SFXPower* Power, Int TalentRefund, Class* EvolvedPowerClass );
		void ProcessWheelDisplayOrder( Int nPower, Int nSortedIndex, Int nHighIndex, Bool bAddToEnd, Array<Int> aSortedIndices );
		void GetPowerWheelPowers( Array<SFXPower*> PowerList, Int nIndex, SFXPower* EvolvedPower, Array<SFXPower*> EvolvedPowers );
		void StartFirstTimeDelay( SFXPower* Power, Int nIndex );
		void OnSharedCooldownFinished( SFXAI_Core* AIController );
		Bool IsEvolvedPower( Name nmClassName, Class* PowerClass, Int nIndex, Class* EvolvedPowerClass, Array<String> PathArray, Name nmShortClassName );
		void LoadPowers( Array<PowerSaveInfo> PowerList, Int nIndex, SFXPower* Power, Class* PowerClass, Class* EvolvedPowerClass, BioPowerScript* PowerScript );
		void SavePowers( Array<PowerSaveInfo> PowerList, Int nIndex );
		void Tick( Float fDeltaTime );
		void SetSharedCooldownTotal( Float fCooldown );
		Float GetSharedCooldownTotal();
		void SetSharedCooldownRemaining( Float fCooldown );
		Float GetSharedCooldownRemaining();
		Bool HasPowerBeenEvolved( SFXPower* Power, SFXPower* EvolvedPower, Int nIndex );
		void GetCharacterRecordPowers( Array<SFXPower*> PowerList, Int nIndex, SFXPower* EvolvedPower, Array<SFXPower*> EvolvedPowers );
		SFXPower* GetPowerByClass( Class* PowerClass );
		SFXPower* GetPower( Name nmPowerName );
		Bool RemovePower( Class* PowerClass, SFXPower* Power );
		SFXPower* AddPowerByClassName( String PowerClassName, Class* PowerClass );
		SFXPower* AddPower( Class* PowerClass, SFXPower* Power, SFXPower* PowerInList, Int nIndex );
	};

	class SFXAnimNotify_RaceWwiseEvent: public AnimNotify_WwiseEvent
	{
		DECLARE_PACKAGE_CLASS( SFXAnimNotify_RaceWwiseEvent, AnimNotify_WwiseEvent, SFXGame )

	public:

		String RaceTypeRTPCName; //offset = 80, size = 12
	};

	class SFXSeqAct_CaptureSceneTexture: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CaptureSceneTexture, SequenceAction, SFXGame )

	public:

		TextureRenderTarget2D* Destination; //offset = 240, size = 4
		Int ViewId; //offset = 244, size = 4
		Int FilterFactor; //offset = 248, size = 4
	};

	class SFXOnlineComponentUI: public SFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentUI, SFXOnlineComponent, SFXGame )

	public:

		Pointer VfTable_IISFXOnlineComponentUserInterface; //offset = 100, size = 4
		SFXSFHandler_EANetworking* m_oGUI; //offset = 104, size = 4
		Name HandlerId; //offset = 108, size = 8
		__ExternalCallback_OnDisplayNotification__Delegate __ExternalCallback_OnDisplayNotification__Delegate; //offset = 116, size = 12
		__ExternalCallback_ClearNotifications__Delegate __ExternalCallback_ClearNotifications__Delegate; //offset = 128, size = 12
		__ExternalCallback_SetState__Delegate __ExternalCallback_SetState__Delegate; //offset = 140, size = 12
		__ExternalCallback_CloseEANetworking__Delegate __ExternalCallback_CloseEANetworking__Delegate; //offset = 152, size = 12
		__ExternalCallback_HasCerberusDLC__Delegate __ExternalCallback_HasCerberusDLC__Delegate; //offset = 164, size = 12
		__ExternalCallback_ShowStore__Delegate __ExternalCallback_ShowStore__Delegate; //offset = 176, size = 12

		void ClearDelegates();
		void ShowStore( Array<SFXOfferDescriptor> aOffers );
		void HasCerberusDLC( Bool bVal );
		void ClearNotifications();
		void OnDisplayNotification( Byte Type, String MessageData, String Title, String Image );
		void SetState( Byte eState );
		void CloseEANetworking();
		void SubmitParentEmail( Bool bContinue, String ParentEmail );
		void SubmitAccountDemographics( Bool bContinue, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode );
		void SubmitEmailPasswordMismatch( String Email, String Password, Byte eReturnCode );
		void SubmitStore( Array<Int> aiChosen );
		void SubmitCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode, Bool bSubmit );
		void SubmitCerberusWelcomeMessage();
		void SubmitRedeemCode( Bool bContinue, String i_sCode );
		void SubmitCerberusIntro( Byte eReturnCode );
		void SubmitNucleusWelcomeMessage();
		void SubmitTermsOfService( Bool bAccept );
		void SubmitCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bRegisterProduct, Bool bBioWareProducts, Bool bSubmit );
		void SubmitMessageBox( Byte eReturnEnum );
		void SubmitNucleusLogin( String Email, String Password, Byte eReturnCode );
		void SubmitIntroPage( Bool bContinue );
		void ShowParentEmail();
		void ShowAccountDemographics( Array<String> m_CountryCodeList, Array<String> m_CountryDisplayList );
		void ShowEmailPasswordMismatch( String Email, String Password );
		void ShowCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode, Array<String> m_CountryCodeList, Array<String> m_CountryDisplayList );
		void ShowCerberusWelcomeMessage();
		void ShowRedeemCode();
		void ShowCerberusIntro();
		void ShowNucleusWelcomeMessage();
		void ShowTermsOfService( String i_sTermsOfService, Bool bTOSChanged );
		void ShowCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bRegisterProduct, Bool bBioWareProducts, Bool bUnderage );
		void ShowMessageBox( String sTitle, String sMessage, String sButton1Text, String sButton2Text, String sButton3Text );
		void ShowNucleusLogin( String Email, String Password, Int eScreenState );
		void ShowIntroPage();
		void ExternalCallback_ShowStore( Array<SFXOfferDescriptor> aOffers );
		void ExternalCallback_HasCerberusDLC( Bool bVal );
		void ExternalCallback_CloseEANetworking();
		void ExternalCallback_SetState( Byte eState );
		void ExternalCallback_ClearNotifications();
		void ExternalCallback_OnDisplayNotification( Byte Type, String MessageData, String Title, String Image );
		void AcceptTOS( Bool bAccept );
		void DownloadContent( Bool bCerberusContent );
		void Disconnect();
		void Connect( Byte connectMode );
		void ClearGui();
		void SetGui( SFXSFHandler_EANetworking* i_NetworkingGUI );
		void OnTick( SFXOnlineEvent* oEvent );
		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
	};

	class BioDeathVFXCore: public Object
	{
		DECLARE_PACKAGE_CLASS( BioDeathVFXCore, Object, SFXGame )

	public:
	};

	class BioDeathVFXControl: public BioDeathVFXCore
	{
		DECLARE_PACKAGE_CLASS( BioDeathVFXControl, BioDeathVFXCore, SFXGame )

	public:
	};

	class BioDeathVFX: public BioDeathVFXCore
	{
		DECLARE_PACKAGE_CLASS( BioDeathVFX, BioDeathVFXCore, SFXGame )

	public:
	};

	class BioInert: public BioArtPlaceable
	{
		DECLARE_PACKAGE_CLASS( BioInert, BioArtPlaceable, SFXGame )

	public:
	};

	class BioUseable: public BioArtPlaceable
	{
		DECLARE_PACKAGE_CLASS( BioUseable, BioArtPlaceable, SFXGame )

	public:
	};

	const char* CANCEL_REASON_IN_PLAYER_LINE_OF_FIRE = 16;
	const char* CANCEL_REASON_TARGET_CHANGED = 8;
	const char* CANCEL_REASON_ORDER_CANCELLED = 4;
	const char* CANCEL_REASON_NEW_ORDER = 2;
	const char* CANCEL_REASON_SHOT = 1;

	enum EAICustomActionTypes
	{
		AI_DefaultCustomAction,
		AI_DamageCustomAction,
	};

	enum EAITicketType
	{
		AI_NoTicket,
		AI_TargetTicket,
	};

	enum EAICompletionReasons
	{
		AI_Cancelled,
		AI_Success,
		AI_Failed,
		AI_LOS,
	};

	enum AttackResult
	{
		ATTACK_SUCCESS,
		ATTACK_FAIL,
		ATTACK_FAIL_RELOADING,
	};


	class SFXAI_Core: public SFXAI_NativeBase
	{
		DECLARE_PACKAGE_CLASS( SFXAI_Core, SFXAI_NativeBase, SFXGame )

	public:
		struct FollowingActor
		{
			/*
			NotifyBump
			GetBurstDelay
			UpdateFollowing
			TeleportToActor
			PathfindToActor
			IsDirectlyReachable
			GetActorToFollow
			ContinuedState
			ShouldCancelFollow
			PausedState
			PoppedState
			PushedState
			*/
		};

		struct MovingToGoal
		{
			/*
			LogRoute
			GetMoveOffset
			UpdateMovementActions
			GetBurstDelay
			CancelAction
			IsSpecialMoveAfterCurrentMoveTarget
			GetFirstMoveTarget
			FinishPathGeneration
			ApplyPathConstraints
			HasReachedGoal
			MoveTimedOut
			CanSkipNodeAfterTimeout
			CheckPawnInPlaypen
			OnEnteredPlaypen
			GetPeriodicMoveInterval
			PoppedState
			PushedState
			*/
		};

		struct MovingToLocation
		{
			/*
			ShouldCancelMove
			GetBurstDelay
			HasReachedLocation
			PoppedState
			PushedState
			*/
		};

		struct WaitingForAnimatedTransition
		{
		};

		struct Disabled
		{
			/*
			StartFollowingActor
			MoveToGoalExternal
			FireWeaponAtTarget
			UsePowerOnTarget
			CanSwitchBehaviours
			OnEnteredPlaypen
			OnLeftPlaypen
			*/
		};

		struct ReturningToPlaypen
		{
			/*
			MoveToPlaypen
			EndState
			BeginState
			*/
		};

		struct CustomAction_CombatActivate
		{
			/*
			ExecuteCustomAction
			NotifyNewEnemy
			WakeOnNotify
			*/
		};

		struct CustomAction_CoverClimbUp
		{
			/*
			PushedState
			ExecuteCustomAction
			*/
		};

		struct CustomAction_CoverMantle
		{
			/*
			PushedState
			ExecuteCustomAction
			*/
		};

		struct CustomAction_CoverMantleClimbBase
		{
			/*
			GetCustomActionMovementState
			FinishedCustomAction
			PushedState
			ShouldFinishRotation
			*/
		};

		struct CustomAction_DeathReaction
		{
			/*
			IsPlayingDeathReaction
			*/
		};

		struct CustomAction_DamageReaction
		{
			/*
			GetPostCustomActionSleepTime
			ShouldFinishRotation
			ExecuteCustomAction
			IsPlayingReaction
			*/
		};

		struct CustomAction
		{
			/*
			ExecuteCustomAction
			GetPostCustomActionSleepTime
			FinishedCustomAction
			ShouldFinishPostRotation
			ShouldFinishRotation
			PoppedState
			PushedState
			EnableAI
			CanInterruptCurrentState
			OnLeftPlaypen
			*/
		};

		struct AIGoHere
		{
			/*
			AIGoHereMoveToGoal
			AIGoHereMoveToCover
			SetAIGoHereMoveGoal
			SetAIGoHereCoverGoal
			PoppedState
			PushedState
			*/
		};

		struct AIGoHereSitAndShoot
		{
		};

		struct Dying
		{
			/*
			CanInterruptCurrentState
			SwitchWeapon
			NotifyUnderAttack
			TakeDamage
			OnEnteredPlaypen
			OnLeftPlaypen
			*/
		};

		struct UsingPower
		{
			/*
			ContinuedState
			PausedState
			PoppedState
			PushedState
			CleanUp
			ShouldCancelPower
			UpdatePower
			StartPower
			WasPowerUseOrderedByPlayer
			ChoosePowerTarget
			CanStartPower
			*/
		};

		struct Combat
		{
			/*
			SwitchWeapon
			ContinuedState
			PoppedState
			PushedState
			EndState
			BeginState
			CheckPendingWeaponSwitch
			IsInFightingState
			*/
		};

		struct SwitchingWeapons
		{
			/*
			IsWeaponSwitching
			ChangeWeapons
			PoppedState
			*/
		};

		struct EnteringCover
		{
		};

		struct MovingToCover
		{
			/*
			PoppedState
			*/
		};

		struct FiringWeapon
		{
			/*
			LeanBeforeShooting
			PushedState
			PoppedState
			PausedState
			NotifyWeaponFinishedFiring
			GetBurstDelay
			ShootWeapon
			AimWeapon
			NotifyFireLineBlocked
			UpdateFiring
			StopFiringWeapon
			StartFiringWeapon
			ReEvaluateCover
			CanStartFiring
			*/
		};

		struct IdleDebug
		{
		};

		struct Idle
		{
			/*
			NotifyNewEnemy
			ContinuedState
			PausedState
			PoppedState
			EndState
			PushedState
			BeginState
			*/
		};

		Bool bUseTicketing: 1; //offset = 1124, size = 4
		Bool m_bAIGoHereCanUseCover: 1; //offset = 1124, size = 4
		Name m_nmCurrentBehavior; //offset = 1128, size = 8
		Bool m_bSpecialMoveAllowed: 1; //offset = 1136, size = 4
		Bool m_bPowerProjectileReleased: 1; //offset = 1136, size = 4
		Bool m_bCancelAction: 1; //offset = 1136, size = 4
		Bool m_bWaitBeforeNextAttack: 1; //offset = 1136, size = 4
		Bool m_bInvalidatedCover: 1; //offset = 1136, size = 4
		Bool m_bClearVelocityAfterMove: 1; //offset = 1136, size = 4
		Bool m_bUsePowerReservations: 1; //offset = 1136, size = 4
		Bool bFinishedCustomAction: 1; //offset = 1136, size = 4
		Bool bAbortedCustomAction: 1; //offset = 1136, size = 4
		Bool bDoingCustomAction: 1; //offset = 1136, size = 4
		Bool m_bAllowedToLeavePlaypen: 1; //offset = 1136, size = 4
		Bool m_bIgnorePowerSuppression: 1; //offset = 1136, size = 4
		Bool m_bStayLeanedOut: 1; //offset = 1136, size = 4
		Bool m_bUsePartialPaths: 1; //offset = 1136, size = 4
		Bool m_bAvoidDangerLinks: 1; //offset = 1136, size = 4
		Bool m_bAvoidFireFromPlayerOnly: 1; //offset = 1136, size = 4
		Bool m_bAttacking: 1; //offset = 1136, size = 4
		Bool m_bDelayWeaponUse: 1; //offset = 1136, size = 4
		Bool m_bAllowWeaponSwitch: 1; //offset = 1136, size = 4
		Bool m_bPlayedCustomActivationAnim: 1; //offset = 1136, size = 4
		Bool m_bPendingWeaponSwitch: 1; //offset = 1136, size = 4
		Bool m_bCustomActionFailed: 1; //offset = 1136, size = 4
		Bool m_bUsePeriodicCoverCheck: 1; //offset = 1136, size = 4
		Bool bActorReachable: 1; //offset = 1136, size = 4
		Bool m_bFirstIdle: 1; //offset = 1136, size = 4
		Bool m_bFailedTicket: 1; //offset = 1136, size = 4
		Bool bDying: 1; //offset = 1136, size = 4
		Byte DamageReaction; //offset = 1140, size = 1
		Byte m_AttackResult; //offset = 1141, size = 1
		Byte m_eBestTargetCoverAction; //offset = 1142, size = 1
		Name m_nmPowerToUse; //offset = 1144, size = 8
		Float m_fFiringArcAngle; //offset = 1152, size = 4
		Int m_nCancelReasons; //offset = 1156, size = 4
		Actor* m_PowerTargetActor; //offset = 1160, size = 4
		Vector m_PowerTargetLocation; //offset = 1164, size = 12
		Float m_fSpecialMoveTimeDelay; //offset = 1176, size = 4
		Array<Name> BehaviourList; //offset = 1180, size = 12
		Int m_nReservationID; //offset = 1192, size = 4
		Int m_nMoveAttemptCounter; //offset = 1196, size = 4
		Float m_fLastCoverEnterTime; //offset = 1200, size = 4
		Float m_fReloadThreshold; //offset = 1204, size = 4
		Actor* m_RequestedActorToFollow; //offset = 1208, size = 4
		Actor* m_ActorToFollow; //offset = 1212, size = 4
		Int m_nPowerCompletionReason; //offset = 1216, size = 4
		Int m_nWeaponCompletionReason; //offset = 1220, size = 4
		Int m_nMoveCompletionReason; //offset = 1224, size = 4
		Goal_AtCover* AtCover_WeaponRange; //offset = 1228, size = 4
		Goal_AtCover* AtCover_Defensive; //offset = 1232, size = 4
		Goal_AtCover* AtCover_Aggressive; //offset = 1236, size = 4
		Goal_AtCover* AtCover_NearMoveGoal; //offset = 1240, size = 4
		Goal_AtGoHereCover* AtCover_AIGoHere; //offset = 1244, size = 4
		Float m_fRunThreshold; //offset = 1248, size = 4
		SFXWeapon* m_oNextWeapon; //offset = 1252, size = 4
		Int m_nCurrentAttackID; //offset = 1256, size = 4
		Int m_nTargetTicketCost; //offset = 1260, size = 4
		Actor* m_oGoalActor; //offset = 1264, size = 4
		Pawn* m_oLastBumped; //offset = 1268, size = 4
		Float m_fLastBumpTime; //offset = 1272, size = 4
		BioPawn* m_oPushingPawn; //offset = 1276, size = 4
		Vector m_vPushDirection; //offset = 1280, size = 12
		Float m_fLastPushTime; //offset = 1292, size = 4
		Actor* m_oLastApproachTarget; //offset = 1296, size = 4
		Float m_fLastApproachDistance; //offset = 1300, size = 4
		Float m_fLastApproachCheckTime; //offset = 1304, size = 4
		__UsePowerDelegate__Delegate __UsePowerDelegate__Delegate; //offset = 1308, size = 12
		__FireWeaponDelegate__Delegate __FireWeaponDelegate__Delegate; //offset = 1320, size = 12
		__MoveToDelegate__Delegate __MoveToDelegate__Delegate; //offset = 1332, size = 12
		__TryInvalidateTargetRange__Delegate __TryInvalidateTargetRange__Delegate; //offset = 1344, size = 12
		__TryInvalidateTargetFlank__Delegate __TryInvalidateTargetFlank__Delegate; //offset = 1356, size = 12

		Bool CanCustomActionTerminateEarly();
		void NotifyKnockedOutOfCover();
		Float FindClosestApproachDistance( Actor* oActor, Goal_AtActor* oAtGoalEval, Actor* FirstMoveTarget );
		Bool TeleportToActor( Actor* oActor, Bool bForceTeleport, Vector vDestination, Vector vNearestOpenLocation, PlayerController* PlayerController );
		Bool IsInWeaponRange( Actor* oTarget, Float fDistance, Float fWeaponRange );
		Float TargetRange();
		Bool UsePower( Name nmPower, Actor* oTarget, Bool bIgnoreSuppression, Bool bIgnoreReservation, Bool bCheckLOS, SFXPower* oPower, Vector ProjectileOrigin, Vector AttackOrigin );
		Bool CanShootWeapon( Actor* oTarget );
		Bool CanUsePower( SFXPower* oPower, Actor* oTarget, Bool bIgnoreDelay, Float fDistance, BioPowerScript* oPowerScript, String sPowerInfo );
		Bool ChooseDeathPower( Name nmPower, Int nIndex, SFXPower* oPower, Array<SFXPower*> Powers );
		Bool ChooseDefensivePower( Name nmPower, Int nIndex, SFXPower* oPower, Array<SFXPower*> Powers );
		Bool ChooseAttackPower( Actor* oTarget, Name nmPower, Int nRequiresAttackTicket, Vector AttackOrigin, Int nIndex, SFXPower* oPower, Array<SFXPower*> Powers, Vector ProjectileOrigin, Int nNewIndex, Bool bAdded );
		void NotifySharedCooldownFinished();
		void UpdateMovementActions();
		Bool MoveToGoal( Actor* NewMoveGoal, Float NewMoveOffset, MoveDelegate MoveDelegate, Bool bIgnoreAIGoHere );
		Bool RespondToBump( Actor* Other, Vector HitNormal );
		void EnableSpecialMove();
		void StartSpecialMoveDelayTimer();
		void DrawLocationMarker( Vector vLocation, Float fSize, Int nRed, Int nGreen, Int nBlue, Vector vStart, Vector vEnd );
		void BioClearCrossLevelReferences( Level* oLevel );
		Bool CanSwitchBehaviours();
		Bool IsActorInPlaypen( Actor* oActor );
		void OnLeftPlaypen();
		Bool IsReturningToPlaypen();
		Bool IsFlankedByTarget( Actor* oTarget, Vector vPawnRotation, Vector vTargetLocation, Float fDot );
		void CustomActionTimeout();
		Bool IsPlayingDeathReaction();
		Bool IsPlayingReaction();
		void NotifyLimbDetached( Byte ePartGroup );
		Bool VerifyCAHasBeenInstanced( Byte CAIndex );
		Bool IsDoingACustomAction();
		void CustomActionEnded( Byte PrevAction );
		Bool CanDoCustomAction( Byte CAction );
		void EndCustomAction();
		void DoCustomAction( Byte NewAction );
		Bool StartCustomAction( Byte NewAction, Byte CustomActionType, Name CustomActionState );
		Name GetCustomActionState( Byte eAction );
		Bool GetCurrentCustomAction( BioCustomAction* pAction );
		void OnEnteringStasis();
		void NotifyDeathBlow();
		Bool UpdateDeathState();
		void CheckPendingWeaponSwitch();
		void PlayAmbientVoc();
		void Taunt();
		Bool IsInFightingState();
		void SwitchWeapon( SFXWeapon* oWeapon );
		void SetSquadIntoCombat( BioAiController* oMember );
		Float GetPowerUsePercent();
		void ReleaseTicket( Actor* oTarget, Byte eTicket, Bool bKillAttackTicket, BioPawn* oTargetPawn );
		Bool AcquireTicket( Actor* oTarget, Byte eTicket, Int nAttackTicketCost, BioPawn* oTargetPawn, Bool bAcquiredTicket );
		void ClearPowerReservation( Name nmPower, Bool bSkipProjectilePowers, BioPower* oPower, BioWorldInfo* oWorldInfo );
		Bool RequestPowerReservation( Name nmPower, Bool bForceSuccess, BioPower* oPower, BioWorldInfo* oWorldInfo );
		Bool Reload(, SFXWeapon* Weapon );
		Bool ShouldReload(, SFXWeapon* Weapon, Float fMagazineSize, Float fRemaining );
		Bool ChooseAttack( Actor* oTarget, Name nmPowerName, SFXWeapon* oWeapon, Int nRequiresAttackTicket, Vector AttackOrigin );
		Byte ATTACK(, Name nmPowerName );
		void ClearCancelAction();
		void CancelAction( Int nReason );
		Bool IsAttacking();
		Bool WantsToRun( Float fDistance );
		void SetMovementSpeed( Float fDistance, Vector vMove );
		void PeriodicMoveCheck();
		Bool SetMoveGoal( Actor* NewMoveGoal, Float NewMoveOffset );
		void PeriodicCoverValidation( CoverSlotMarker* oCoverSlot, Int idx, Pawn* oEnemyPawn, Float fDistFromEnemySq );
		Bool IsMovingToCover();
		Bool MoveToCover( Goal_AtCover* GoalEvaluator, Actor* GoalActor, Bool bUsePeriodicCheck, Bool bIgnoreAIGoHere, CoverInfo NewCoverGoal );
		Bool AcquireCoverGoal( Goal_AtCover* GoalEvaluator, Actor* GoalActor, Bool bIgnoreAIGoHere, CoverInfo NewCoverGoal, CoverSlotMarker* Marker );
		void ApplyBasePathConstraints();
		Bool DebugMoveToGoal( Actor* NewMoveGoal, Float NewMoveOffset );
		Bool DebugMoveToCover( CoverInfo NewCoverGoal );
		void NotifyWeaponDelayFinished();
		void ReEvaluateCover();
		Vector GetAimLocation( Int EnemyIdx, Vector StartLoc, Vector AimLoc, CoverInfo EnemyCover, BioPawn* oEnemyPawn, Vector LeftPos, Vector RightPos, Byte TargetCoverAction, Byte CoverSlotType );
		Byte GetBestTargetCoverAction( BioPawn* TargetPawn, CoverInfo TargetCover );
		void SetBestTargetCoverAction( Byte BestAction );
		Bool RespondToPush();
		void PushPawn( BioPawn* oPawn, Vector HitNormal );
		Bool NotifyHitWall( Vector HitNormal, Actor* Wall, BioCustomAction* Action );
		Bool NotifyBump( Actor* Other, Vector HitNormal, BioCustomAction* Action, SFXAI_Core* oOtherAI );
		void NotifyCoverDisabled( CoverLink* Link, Int SlotIdx, BioPawn* MyPawn );
		void NotifyPowerFinished( Name nmPower );
		void NotifyUnderAttack( Bool bHit );
		void NotifyNearMiss( Vector HitLocation );
		void NotifyTakeHit( Controller* InstigatedBy, Vector HitLocation, Int Damage, Class* DamageType, Vector Momentum );
		void FindNewCover();
		void TriggerAttackVocalization();
		void OnTargetChanged();
		void AdjustEnemyRating( Pawn* EnemyPawn, Float fRating );
		void AdjustRatingByTickets( Float out_Rating, Int EnemyIdx, Float fTicketAdjustmentFactor, BioPawn* oEnemyPawn );
		Bool SelectTarget(, Actor* OldTarget, Int idx, Int BestIdx, Float Rating, Float BestRating, Float Distance, Pawn* EnemyPawn, CoverInfo EnemyCover, Bool bResult, Pawn* ForcedEnemy );
		void SpawnedByKismet();
		void Initialize();
		void PostBeginPlay();
		Bool ChangeBehaviour( Name NewBehaviour );
		Bool SetDefaultBehaviour( Name NewBehaviour, Int nBehaviourIndex );
		void GetBehaviourList( Array<Name> Behaviours, Name nmBehaviour );
		void ClearGoHereDelegates();
		void AssignGoHereDelegates( RangeDel RangeDel, FlankDel FlankDel );
		void StopFollowingActor();
		Bool StartFollowingActor( Actor* ActorToFollow );
		void MoveToGoalExternal( Actor* NewMoveGoal, Float NewMoveOffset, MoveDelegate MoveDelegate );
		void FireWeaponAtTarget( Actor* oTarget, Bool bCheckLOS, FireDelegate FireDelegate );
		void UsePowerOnTarget( Name nmPowerToUse, Actor* oTarget, PowerDelegate PowerDelegate, Bool bIgnoreSuppression );
		void NotifyPlaypenChanged();
		Bool TryInvalidateTargetFlank();
		Bool TryInvalidateTargetRange( Float fRangeToTarget );
		void MoveToDelegate( Int nReason );
		void FireWeaponDelegate( Int nReason );
		void UsePowerDelegate( Int nReason );
	};

	class SFXProjectile: public Projectile
	{
		DECLARE_PACKAGE_CLASS( SFXProjectile, Projectile, SFXGame )

	public:

		Bool bSuppressAudio: 1; //offset = 568, size = 4
		Bool bShuttingDown: 1; //offset = 568, size = 4
		Bool bArcing: 1; //offset = 568, size = 4
		Bool bPooled: 1; //offset = 568, size = 4
		MeshComponent* Mesh; //offset = 572, size = 4
		Vector DesiredScale; //offset = 576, size = 12
		Float MeshScaleTime; //offset = 588, size = 4
		ParticleSystemComponent* ProjEffectsTrail; //offset = 592, size = 4
		ParticleSystemComponent* ProjEffectsHead; //offset = 596, size = 4
		ParticleSystem* ProjEffectsTrailTemplate; //offset = 600, size = 4
		ParticleSystem* ProjEffectsHeadTemplate; //offset = 604, size = 4
		Float ProjEffectsTrailWaitTime; //offset = 608, size = 4

		void SpawnImpactEffect( Vector HitLocation, Vector HitNormal );
		Float GetDamageRadius(, SFXWeapon* Weapon );
		Float GetDamage(, SFXWeapon* Weapon );
		void ProcessTouch( Actor* Other, Vector HitLocation, Vector HitNormal );
		void Tick( Float DeltaTime );
		void ProjEffectsTrailFinished( ParticleSystemComponent* PSC );
		void SetProjectileHidden( Bool bHide );
		void Explode( Vector HitLocation, Vector HitNormal );
		void HitWall( Vector HitNormal, Actor* Wall, PrimitiveComponent* WallComp );
		void OutsideWorldBounds();
		Bool IsShuttingDown();
		void ShutDown();
		void Init( Vector Direction );
		void ShutdownPostEffects();
		void Reuse();
		void Recycle();
		void SpawnFlightEffects( Int idx );
	};


	class SFXProjectile_Explosive: public SFXProjectile
	{
		DECLARE_PACKAGE_CLASS( SFXProjectile_Explosive, SFXProjectile, SFXGame )

	public:
		struct WaitingForVelocity
		{
			/*
			Tick
			*/
		};

		WwiseEvent* ExplosionSound; //offset = 612, size = 4
		Bool bDuckAudio: 1; //offset = 616, size = 4
		Bool bAdvanceExplosionEffect: 1; //offset = 616, size = 4
		Bool bSuppressExplosionFX: 1; //offset = 616, size = 4
		Float DuckDistanceThreshold; //offset = 620, size = 4
		WwiseEvent* WwiseDuckEvent; //offset = 624, size = 4
		Float fFuseLength; //offset = 628, size = 4
		ParticleSystem* ProjExplosionTemplate; //offset = 632, size = 4
		MaterialInterface* ExplosionDecal; //offset = 636, size = 4
		Float DecalWidth; //offset = 640, size = 4
		Float DecalHeight; //offset = 644, size = 4
		Float DurationOfDecal; //offset = 648, size = 4
		Name DecalDissolveParamName; //offset = 652, size = 8
		Float MaxEffectDistance; //offset = 660, size = 4
		Float AccelRate; //offset = 664, size = 4
		Float TossZ; //offset = 668, size = 4
		Float TerminalVelocity; //offset = 672, size = 4
		Float CustomGravityScaling; //offset = 676, size = 4
		Float ExplosionParticleLifetime; //offset = 680, size = 4
		Float ExplosionEffectRadius; //offset = 684, size = 4

		Bool ProjectileHurtRadius( Float InDamageAmount, Float InDamageRadius, Float Momentum, Vector HurtOrigin, Vector HitNormal, Bool bCausedDamage, Bool bInitializedAltOrigin, Bool bFailedAltOrigin, Actor* Victim, Vector AltOrigin, Vector OutLocation, Vector OutNormal );
		void DoImpact( Actor* InImpactedActor, Controller* InInstigatorController, Float BaseDamage, Float InDamageRadius, Float Momentum, Vector HurtOrigin, Bool bFullDamage, SFXWeapon* Weapon, Class* DamageTypeToUse );
		void ProcessTouch( Actor* Other, Vector HitLocation, Vector HitNormal );
		void Explode( Vector HitLocation, Vector HitNormal );
		void HitWall( Vector HitNormal, Actor* Wall, PrimitiveComponent* WallComp );
		void Timer();
		void SpawnExplosionEffects( Vector HitLocation, Vector HitNormal, Rotator EffectRotation, SFXEmitter* ProjExplosionEmitter, MaterialInstanceTimeVarying* MITV_Decal, Vector ListenerPosition );
		void SetExplosionEffectParameters( ParticleSystemComponent* ProjExplosion );
		Bool EffectIsRelevant( Vector SpawnLocation, Bool bForceDedicated, Float CullDistance, PlayerController* PC );
		Bool CheckMaxEffectDistance( PlayerController* P, Vector SpawnLocation, Float CullDistance, Float Dist );
		void Init( Vector Direction );
		void Recycle();
		void SetInitialState();
		Bool CanSplash();
		void Landed( Vector HitNormal, Actor* FloorActor );
	};

	class SFXProjectile_Power: public SFXProjectile_Explosive
	{
		DECLARE_PACKAGE_CLASS( SFXProjectile_Power, SFXProjectile_Explosive, SFXGame )

	public:

		BioVisualEffect* ProjectileVFX; //offset = 688, size = 4
		BioPower* Power; //offset = 692, size = 4
		Actor* Caster; //offset = 696, size = 4
		Vector WorldImpactPoint; //offset = 700, size = 12
		Vector WorldImpactNormal; //offset = 712, size = 12
		Bool bUsePowerReservation: 1; //offset = 724, size = 4
		Bool ShowPowerAiming: 1; //offset = 724, size = 4
		Int ReservationID; //offset = 728, size = 4
		Int ImpactedCount; //offset = 732, size = 4
		Vector LastLocation; //offset = 736, size = 12
		Actor* TargetActor; //offset = 748, size = 4
		Vector TargetLocation; //offset = 752, size = 12
		Vector CameraLocation; //offset = 764, size = 12
		Rotator CameraRotation; //offset = 776, size = 12
		Array<Actor*> ImpactedActors; //offset = 788, size = 12

		void ShutDown();
		void Recycle();
		void Tick( Float DeltaTime, Vector Extent );
		Bool InitializePowerProjectile( Actor* oCaster, Float fTravelSpeed, Float fRadius, BioPower* oPower, Float fIntensity, Vector vRadius, Vector vTravelSpeed, BioWorldInfo* TheWorldInfo, BioPlayerController* PlayerController, BioCheatManager* CheatManager );
		void GenerateOnCastAt( Actor* Target );
		void Explode( Vector HitLocation, Vector HitNormal, Float fRadius );
		Bool ProjectileHurtRadius( Float InDamageAmount, Float InDamageRadius, Float Momentum, Vector HurtOrigin, Vector HitNormal, Bool bInitializedAltOrigin, Bool bFailedAltOrigin, Actor* Victim, Vector AltOrigin, Vector OutLocation, Vector OutNormal, Int nImpactedCount, Bool bCausedDamage );
		void DoPowerImpact( Actor* oActor, Controller* InstigatedBy, Int nImpactedCount );
		void ProcessTouch( Actor* Other, Vector HitLocation, Vector HitNormal );
		void HitWall( Vector HitNormal, Actor* Wall, PrimitiveComponent* WallComp );
		void Timer();
		Float GetDamageRadius();
	};

	class BioSeqEvt_AffectedByPower: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_AffectedByPower, SequenceEvent, SFXGame )

	public:

		Array<Class*> Powers; //offset = 280, size = 12

		void HandleActivation( Actor* InOriginator, Actor* InInstigator, Class* inPower );
	};

	class BioActiveSelectWeapon: public BioActive
	{
		DECLARE_PACKAGE_CLASS( BioActiveSelectWeapon, BioActive, SFXGame )

	public:
	};

	class BioActiveShootBase: public BioActive
	{
		DECLARE_PACKAGE_CLASS( BioActiveShootBase, BioActive, SFXGame )

	public:
	};

	class BioActiveShoot: public BioActiveShootBase
	{
		DECLARE_PACKAGE_CLASS( BioActiveShoot, BioActiveShootBase, SFXGame )

	public:

		Bool m_bStartedInCover: 1; //offset = 76, size = 4
		Bool m_isLoopingFireAnimationRateVariable: 1; //offset = 76, size = 4
		Bool m_isFiring: 1; //offset = 76, size = 4
		Bool m_bIsAutomatic: 1; //offset = 76, size = 4
		Bool m_bIsFakeFire: 1; //offset = 76, size = 4
		Bool m_bDisableDamage: 1; //offset = 76, size = 4
		Bool m_bDisableVFX: 1; //offset = 76, size = 4
		BioPawn* m_oOwnerPawn; //offset = 80, size = 4
		Float m_fLeanDelayTimer; //offset = 84, size = 4
		Float m_fLeanDelayTime; //offset = 88, size = 4
		Float m_fLeanDelayVarianceTime; //offset = 92, size = 4

		Name GetEventTypeName();
		Bool ValidSuperMode( Byte eMode );
	};

	class BioActiveShootVehicle: public BioActiveShootBase
	{
		DECLARE_PACKAGE_CLASS( BioActiveShootVehicle, BioActiveShootBase, SFXGame )

	public:

		Int m_nWeaponIndex; //offset = 76, size = 4
	};

	class BioActiveShootVehicleCannon: public BioActiveShootVehicle
	{
		DECLARE_PACKAGE_CLASS( BioActiveShootVehicleCannon, BioActiveShootVehicle, SFXGame )

	public:
	};

	class BioActiveShootVehicleMachineGun: public BioActiveShootVehicle
	{
		DECLARE_PACKAGE_CLASS( BioActiveShootVehicleMachineGun, BioActiveShootVehicle, SFXGame )

	public:
	};

	class BioDamageType: public Object
	{
		DECLARE_PACKAGE_CLASS( BioDamageType, Object, SFXGame )

	public:
	};

	class BioActorFactoryLedgeMesh: public ActorFactoryStaticMesh
	{
		DECLARE_PACKAGE_CLASS( BioActorFactoryLedgeMesh, ActorFactoryStaticMesh, SFXGame )

	public:
	};

	class BioAI_Ambient: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Ambient, Object, SFXGame )

	public:
	};

	class BioAI_Assault: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Assault, Object, SFXGame )

	public:
	};

	class BioAI_AssaultDrone: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_AssaultDrone, Object, SFXGame )

	public:
	};

	class BioAI_Charge: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Charge, Object, SFXGame )

	public:
	};

	class BioAI_Commander: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Commander, Object, SFXGame )

	public:
	};

	class BioAI_Core: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Core, Object, SFXGame )

	public:
	};

	class BioAI_Destroyer: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Destroyer, Object, SFXGame )

	public:
	};

	class BioAI_Drone: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Drone, Object, SFXGame )

	public:
	};

	class BioAI_Gunship: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Gunship, Object, SFXGame )

	public:
	};

	class BioAI_Henchman: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Henchman, Object, SFXGame )

	public:
	};

	class BioAI_HumanoidMinion: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_HumanoidMinion, Object, SFXGame )

	public:
	};

	class BioAI_Inactive: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Inactive, Object, SFXGame )

	public:
	};

	class BioAI_Juggernaut: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Juggernaut, Object, SFXGame )

	public:
	};

	class BioAI_Krogan: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Krogan, Object, SFXGame )

	public:
	};

	class BioAI_Melee: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Melee, Object, SFXGame )

	public:
	};

	class BioAI_Mercenary: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Mercenary, Object, SFXGame )

	public:
	};

	class BioAI_OutsidePlaypen: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_OutsidePlaypen, Object, SFXGame )

	public:
	};

	class BioAI_Rachnii: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Rachnii, Object, SFXGame )

	public:
	};

	class BioAI_RepairDrone: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_RepairDrone, Object, SFXGame )

	public:
	};

	class BioAI_ReturnToSpawn: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_ReturnToSpawn, Object, SFXGame )

	public:
	};

	class BioAI_Sneaky: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Sneaky, Object, SFXGame )

	public:
	};

	class BioAI_Sniper: public Object
	{
		DECLARE_PACKAGE_CLASS( BioAI_Sniper, Object, SFXGame )

	public:
	};

	class SFXSeqEvt_OnStoppedSleeping: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_OnStoppedSleeping, SequenceEvent, SFXGame )

	public:
	};

	enum WeaponAnimType
	{
		WeaponAnimType_Pistol,
		WeaponAnimType_Shotgun,
		WeaponAnimType_Rifle,
		WeaponAnimType_Sniper,
		WeaponAnimType_GrenadeLauncher,
		WeaponAnimType_MissileLauncher,
		WeaponAnimType_NukeLauncher,
	};

	enum FireModes
	{
		FireMode_Firing,
		FireMode_Reload,
	};

	struct CoverLeanPosition
	{
		Vector Offset; //offset = 0, size = 12
		Byte Direction; //offset = 12, size = 1
		Byte Type; //offset = 13, size = 1
		Array<Byte> WeaponTypes; //offset = 16, size = 12
	};

	struct ZoomSnapInfo
	{
		Byte AimNode; //offset = 0, size = 1
		Float OuterSnapAngle; //offset = 4, size = 4
		Float InnerSnapAngle; //offset = 8, size = 4
		Float SnapOffsetMag; //offset = 12, size = 4
	};

	struct TracerSpec
	{
		StaticMesh* StaticMesh; //offset = 0, size = 4
		ParticleSystem* PSTemplate; //offset = 4, size = 4
		Vector Scale3D; //offset = 8, size = 12
		Float AccelRate; //offset = 20, size = 4
		Float Speed; //offset = 24, size = 4
		Float MaxSpeed; //offset = 28, size = 4
	};

	class SFXWeapon: public SFXWeapon_NativeBase
	{
		DECLARE_PACKAGE_CLASS( SFXWeapon, SFXWeapon_NativeBase, SFXGame )

	public:
		struct WeaponEquipping
		{
			/*
			ForceAnimSets
			EquipFinished
			EquipNearFinished
			BeginState
			EquipTimedOut
			TryPutDown
			Activate
			*/
		};

		struct WeaponPuttingDown
		{
			/*
			UnEquipFinished
			BeginState
			UnEquipTimedOut
			TryPutDown
			*/
		};

		struct Reloading
		{
			/*
			CancelReload
			FinishReloading
			TryPutDown
			ReloadNearFinished
			EndState
			BeginState
			TryReload
			*/
		};

		struct StartReload
		{
			/*
			TryPutDown
			WaitForReload
			TransitionToReload
			EndState
			BeginState
			TryReload
			*/
		};

		struct Active
		{
			/*
			IsInPortArms
			EndFire
			BeginFireForReal
			BeginFire
			BeginState
			*/
		};


		Vector DebugShotStartLoc; //offset = 752, size = 12
		Rotator DebugShotAimRot; //offset = 764, size = 12
		Bool bSuperDamage: 1; //offset = 776, size = 4
		Bool bInfiniteAmmo: 1; //offset = 776, size = 4
		Bool bSuppressMuzzleFlash: 1; //offset = 776, size = 4
		Bool bSuppressTracers: 1; //offset = 776, size = 4
		Bool bSuppressImpactFX: 1; //offset = 776, size = 4
		Bool bSuppressAudio: 1; //offset = 776, size = 4
		Bool bSuppressDecal: 1; //offset = 776, size = 4
		Bool bUpgradesBasicWeapon: 1; //offset = 776, size = 4
		Bool bPlayerUsable: 1; //offset = 776, size = 4
		Bool bEarlyReload: 1; //offset = 776, size = 4
		Bool bUseSniperCam: 1; //offset = 776, size = 4
		Bool bForceSpawnTracer: 1; //offset = 776, size = 4
		Bool bIsAutomatic: 1; //offset = 776, size = 4
		Bool bCanDropWeapon: 1; //offset = 776, size = 4
		Bool bCanDropAmmo: 1; //offset = 776, size = 4
		Bool bWeaponCanBeReloaded: 1; //offset = 776, size = 4
		Bool bNotRegularWeaponGUI: 1; //offset = 776, size = 4
		Bool bFrictionEnabled: 1; //offset = 776, size = 4
		Bool bFrictionDistanceScalingEnabled: 1; //offset = 776, size = 4
		Bool bAdhesionEnabled: 1; //offset = 776, size = 4
		Bool bAdhesionDuringCam: 1; //offset = 776, size = 4
		Bool bZoomSnapEnabled: 1; //offset = 776, size = 4
		Bool bScaleAnimDurationByFireRate: 1; //offset = 776, size = 4
		Name MeleePowerName; //offset = 780, size = 8
		Vector2D AI_AccCone_Min; //offset = 788, size = 8
		Vector2D AI_AccCone_Max; //offset = 796, size = 8
		Vector2D AI_BurstFireCount; //offset = 804, size = 8
		Vector2D AI_BurstFireDelay; //offset = 812, size = 8
		Vector2D AI_BurstFireMovingDelay; //offset = 820, size = 8
		Vector2D AI_HenchBurstFireMultiplier; //offset = 828, size = 8
		Vector2D AI_AimDelay; //offset = 836, size = 8
		Float ZoomFOV; //offset = 844, size = 4
		Float fHeatDissipation; //offset = 848, size = 4
		Float fHeatDissipationCooldown; //offset = 852, size = 4
		Int SwitchPriority; //offset = 856, size = 4
		Float fAmmoMultiplier; //offset = 860, size = 4
		Byte AnimType; //offset = 864, size = 1
		Byte AttachSlot; //offset = 865, size = 1
		Byte CharacterSlot; //offset = 866, size = 1
		Byte FireOnceFiringMode; //offset = 867, size = 1
		Array<Name> AimOffsetProfileNames; //offset = 868, size = 12
		ForceFeedbackWaveform* WeaponFireWaveForm; //offset = 880, size = 4
		Float ImpactRelevanceDistance; //offset = 884, size = 4
		ParticleSystem* PS_DefaultImpactEffect; //offset = 888, size = 4
		ParticleSystem* PS_DefaultMaterialImpactEffect; //offset = 892, size = 4
		Float ImpactScale; //offset = 896, size = 4
		DecalComponent* DefaultDecalProperties; //offset = 900, size = 4
		MaterialInterface* DefaultDecalMaterial; //offset = 904, size = 4
		Float ShowTracerDistance; //offset = 908, size = 4
		TracerSpec TracerInfo; //offset = 912, size = 32
		ParticleSystemComponent* PSC_ShellCasing; //offset = 944, size = 4
		ParticleSystemComponent* PSC_ReloadVent; //offset = 948, size = 4
		Float TracerSpawnOffset; //offset = 952, size = 4
		ParticleSystemComponent* PSC_MuzFlashEmitter; //offset = 956, size = 4
		Float TimeToHideMuzzleFlashPSC; //offset = 960, size = 4
		Name MuzzleSocketName; //offset = 964, size = 8
		Name ShellCasingSocketName; //offset = 972, size = 8
		Float WeaponLevel; //offset = 980, size = 4
		Class* DroppedAmmoClass; //offset = 984, size = 4
		Float EjectShellCasingTimeRatio; //offset = 988, size = 4
		Float ReloadReactionWindow; //offset = 992, size = 4
		Float ReloadSuccessDuration; //offset = 996, size = 4
		Float ReloadFailureDuration; //offset = 1000, size = 4
		Bool bQuickReloadSucceeded: 1; //offset = 1004, size = 4
		Bool bDrawingWeapon: 1; //offset = 1004, size = 4
		Bool bHolsteringWeapon: 1; //offset = 1004, size = 4
		Bool bFiringAnimationPlaying: 1; //offset = 1004, size = 4
		Bool WaitingToBeginFire: 1; //offset = 1004, size = 4
		Float LastBulletStrongerPercent; //offset = 1008, size = 4
		Float StealthDamageIncrease; //offset = 1012, size = 4
		ScaledFloat Damage; //offset = 1016, size = 36
		Float DamageAI; //offset = 1052, size = 4
		Float DamageHench; //offset = 1056, size = 4
		ScaledFloat MagSize; //offset = 1060, size = 36
		ScaledFloat MaxSpareAmmo; //offset = 1096, size = 36
		Int InitialMagazines; //offset = 1132, size = 4
		Float LowAmmoSoundThreshold; //offset = 1136, size = 4
		Float SteamSoundThreshold; //offset = 1140, size = 4
		Float NoAmmoFireSoundDelay; //offset = 1144, size = 4
		ScaledFloat MinAimError; //offset = 1148, size = 36
		ScaledFloat MaxAimError; //offset = 1184, size = 36
		ScaledFloat MinZoomAimError; //offset = 1220, size = 36
		ScaledFloat MaxZoomAimError; //offset = 1256, size = 36
		ScaledFloat RateOfFire; //offset = 1292, size = 36
		Float RateOfFireAI; //offset = 1328, size = 4
		Float AmmoPerShot; //offset = 1332, size = 4
		Float BurstRounds; //offset = 1336, size = 4
		Float BurstRefireTime; //offset = 1340, size = 4
		Float BurstCount; //offset = 1344, size = 4
		Float MinRefireTime; //offset = 1348, size = 4
		ScaledFloat Recoil; //offset = 1352, size = 36
		ScaledFloat ZoomRecoil; //offset = 1388, size = 36
		Float RecoilPitchOscillation; //offset = 1424, size = 4
		Float RecoilInterpSpeed; //offset = 1428, size = 4
		Float RecoilFadeSpeed; //offset = 1432, size = 4
		Float RecoilZoomFadeSpeed; //offset = 1436, size = 4
		Float RecoilMinFadePitch; //offset = 1440, size = 4
		Float RecoilMinFadeYaw; //offset = 1444, size = 4
		Float RecoilCap; //offset = 1448, size = 4
		Float ZoomRecoilCap; //offset = 1452, size = 4
		Float RecoilYawScale; //offset = 1456, size = 4
		Float RecoilYawBias; //offset = 1460, size = 4
		Float RecoilYawFrequency; //offset = 1464, size = 4
		Float RecoilPitchFrequency; //offset = 1468, size = 4
		Float TraceRange; //offset = 1472, size = 4
		Float AccFirePenalty; //offset = 1476, size = 4
		Float AccFireInterpSpeed; //offset = 1480, size = 4
		Float ZoomAccFirePenalty; //offset = 1484, size = 4
		Float ZoomAccFireInterpSpeed; //offset = 1488, size = 4
		Float MagneticCorrectionThresholdAngle; //offset = 1492, size = 4
		Float MaxMagneticCorrectionAngle; //offset = 1496, size = 4
		Vector2D CrosshairRange; //offset = 1500, size = 8
		Vector2D ZoomCrosshairRange; //offset = 1508, size = 8
		Float Range_Melee; //offset = 1516, size = 4
		Float Range_Short; //offset = 1520, size = 4
		Float Range_Medium; //offset = 1524, size = 4
		Float Range_Long; //offset = 1528, size = 4
		Float DamageMod_MeleeRange; //offset = 1532, size = 4
		Float DamageMod_ShortRange; //offset = 1536, size = 4
		Float DamageMod_MediumRange; //offset = 1540, size = 4
		Float DamageMod_LongRange; //offset = 1544, size = 4
		Int CurrentSpareAmmo; //offset = 1548, size = 4
		Float AmmoUsedCount; //offset = 1552, size = 4
		Vector MuzzleIdlePosition; //offset = 1556, size = 12
		Object* IconResource; //offset = 1568, size = 4
		Int IconRef; //offset = 1572, size = 4
		PrettyName PrettyName; //offset = 1576, size = 4
		GUIClassName GUIClassName; //offset = 1580, size = 4
		GUIClassDescription GUIClassDescription; //offset = 1584, size = 4
		AmmoPrettyName AmmoPrettyName; //offset = 1588, size = 4
		ShortDescription ShortDescription; //offset = 1592, size = 4
		GeneralDescription GeneralDescription; //offset = 1596, size = 4
		String GUIImage; //offset = 1600, size = 12
		WwiseEvent* DefaultImpactSound; //offset = 1612, size = 4
		WwiseEvent* FireSound; //offset = 1616, size = 4
		WwiseEvent* PlayerFireSound; //offset = 1620, size = 4
		WwiseEvent* WeaponPowerFireSound; //offset = 1624, size = 4
		WwiseEvent* FireNoAmmoSound; //offset = 1628, size = 4
		WwiseEvent* WeaponWhipSoundLeft; //offset = 1632, size = 4
		WwiseEvent* WeaponWhipSoundRight; //offset = 1636, size = 4
		WwiseEvent* WeaponReloadSound; //offset = 1640, size = 4
		WwiseEvent* WeaponExpandSound; //offset = 1644, size = 4
		WwiseEvent* WeaponCollapseSound; //offset = 1648, size = 4
		WwiseEvent* NeedReloadNotifySound; //offset = 1652, size = 4
		WwiseEvent* SteamReloadNotifySound; //offset = 1656, size = 4
		String AmmoRTPCName; //offset = 1660, size = 12
		Float MinFrictionDistance; //offset = 1672, size = 4
		Float MaxFrictionDistance; //offset = 1676, size = 4
		Float PeakFrictionDistance; //offset = 1680, size = 4
		Vector2D FrictionMultiplierRange; //offset = 1684, size = 8
		Float PeakFrictionRadiusScale; //offset = 1692, size = 4
		Float PeakFrictionHeightScale; //offset = 1696, size = 4
		Vector FrictionTargetOffset; //offset = 1700, size = 12
		Float MinAdhesionDistance; //offset = 1712, size = 4
		Float MaxAdhesionDistance; //offset = 1716, size = 4
		Float MinAdhesionVelocity; //offset = 1720, size = 4
		Float CamInputAdhesionDamping; //offset = 1724, size = 4
		Float MaxLateralAdhesionDist; //offset = 1728, size = 4
		Vector2D AdhesionRot; //offset = 1732, size = 8
		Float AimCorrectionAmount; //offset = 1740, size = 4
		Array<ZoomSnapInfo> ZoomSnapList; //offset = 1744, size = 12
		Float MinZoomSnapDistance; //offset = 1756, size = 4
		Float MaxZoomSnapDistance; //offset = 1760, size = 4
		Float ZoomSnapDuration; //offset = 1764, size = 4
		ParticleSystemComponent* AmmoPowerPSCO; //offset = 1768, size = 4
		ParticleSystemComponent* AmmoPowerIconPSCO; //offset = 1772, size = 4
		String AmmoPowerName; //offset = 1776, size = 12
		Array<Name> FadingParameters; //offset = 1788, size = 12
		Byte FireModeToBegin; //offset = 1800, size = 1
		Array<DamageUpgradeTokens> DamageUpgradeTokens; //offset = 1804, size = 12
		Array<ResearchUpgradeTokens> ResearchUpgradeTokens; //offset = 1816, size = 12
		Int DamageUpgradeId; //offset = 1828, size = 4
		Array<Int> ResearchUpgradeIds; //offset = 1832, size = 12
		Array<CoverLeanPosition> CoverLeanPositions; //offset = 1844, size = 12
		__OnWeaponImpact__Delegate __OnWeaponImpact__Delegate; //offset = 1856, size = 12
		__GetDamageVocProbabilityMod__Delegate __GetDamageVocProbabilityMod__Delegate; //offset = 1868, size = 12
		__OnWeaponReload__Delegate __OnWeaponReload__Delegate; //offset = 1880, size = 12
		__OnWeaponEquip__Delegate __OnWeaponEquip__Delegate; //offset = 1892, size = 12
		__OnWeaponUnequip__Delegate __OnWeaponUnequip__Delegate; //offset = 1904, size = 12

		Bool CalculateCoverLeanOutOffset( Vector Offset, Byte Direction, Byte Type, Int I, Int J );
		String GetGeneralDescription();
		String GetShortDescription();
		String GetPrettyName(, Int I, Int nDamage, Int nResearch, BioWorldInfo* oWorldInfo );
		void GetWeaponDebug( Array<String> DebugInfo );
		void DrawDebugShot( Vector StartLocation, Vector EndLocation );
		void DisableAmmoPowerHologram();
		void EnableAmmoPowerHologram( ParticleSystem* Template, ParticleSystem* IconTemplate, SFXGame* oGame, SkeletalMeshComponent* oSkeletalMesh );
		void Destroyed();
		void HolderDied();
		void DropFrom( Vector StartLocation, Vector StartVelocity, SFXDroppedPickup* P, SFXDroppedAmmo* Ammo, Pawn* PlayerPawn, PlayerController* PC );
		Bool CanThrow();
		void DetachWeapon( SkeletalMeshComponent* PawnMesh );
		void AttachMuzzleEffectsComponents( SkeletalMeshComponent* SkelMesh, Name MuzzleSocket, Name CasingSocket );
		void AttachWeaponTo( SkeletalMeshComponent* MeshCpnt, Name SocketName, SkeletalMeshComponent* WeaponSkelMesh, SFXPawn* Pawn );
		void AssignToSlot( Byte Slot, BioPawn* Pawn );
		void GivenTo( Pawn* thisPawn, Bool bDoNotActivate );
		void EquipTimedOut();
		void EquipFinished();
		void EquipNearFinished();
		void Collapse();
		void Expand();
		void UnEquipTimedOut();
		void UnEquipFinished();
		void ReloadNearFinished();
		void CancelReload();
		void RefireBurst();
		Bool ShouldRefire(, BioAiController* AI );
		void PlayNoAmmoFireSound();
		void PlayNoAmmoEffects();
		void TryReload( Bool bDisplayHint, BioPlayerController* PC );
		void DissipateHeat( Float DeltaTime );
		void DoReload( Float Amount );
		void DoEarlyReload();
		Float GetReloadDuration();
		Bool ShouldAutoReload();
		Bool CanReload(, BioPawn* Pawn );
		Bool EffectIsRelevant( Vector SpawnLocation, Bool bForceDedicated, Float CullDistance );
		void PlayReloadEject();
		void StopFireEffects( Byte FireModeNum );
		void WeaponPlayWwiseEvent( WwiseEvent* Sound, Float NoiseLoudness, Vector SoundLoc );
		void SpawnTracerEffect( Vector HitLocation, Float HitDistance, SFXObjectPool* Pool, ParticleSystem* ProjTemplate, StaticMesh* ProjMesh, SFXTracer_Bullet* SpawnedProjectile, Vector SpawnLoc );
		Bool ShouldSpawnTracerFX();
		void PlayOwnedFireEffects( Byte FireModeNum, Vector HitLocation );
		void HideReloadEmitters();
		void HideMuzzleFlashEmitter();
		void StopMuzzleFlashEffect();
		Bool IsCameraWithinRadius( Vector TestLocation, Float Radius, PlayerController* PC, Vector CamLoc, Rotator CamRot );
		Bool IsMuzzleFlashRelevant();
		void PlayMuzzleFlashEffect();
		void PlayFireEffects( Byte FireModeNum, Vector HitLocation );
		void CheckTimerFireOnce();
		void PlayFireEffectsOnce( Byte FireModeNum, Vector HitLocation );
		void PrecacheVFX( SFXGame* Game, SFXObjectPool* Pool, PhysicalMaterial* PhysMat, ParticleSystem* PhysMatEffect, ParticleSystem* ProjTemplate, StaticMesh* ProjMesh );
		DecalComponent* GetWeaponSpecificDecalData( SFXPhysicalMaterialDecals* DecalEffects, Float FadeTime );
		DecalComponent* GetDecalData( PhysicalMaterial* PhysMat, Float FadeTime );
		void SpawnADecal( ImpactInfo Impact, PhysicalMaterial* ParentPhysMaterial, DecalComponent* ImpactDecal, Float Rand, Float RandScaling, Float RandRotation, Float FadeTime, MaterialInstanceTimeVarying* MITV, Name FadeParam );
		WwiseEvent* GetWeaponSpecificImpactSound( SFXPhysicalMaterialImpactSounds* ImpactSounds );
		WwiseEvent* GetImpactSound( PhysicalMaterial* PhysMat );
		void SpawnImpactSounds( ImpactInfo Impact, PhysicalMaterial* ParentPhysMaterial, WwiseEvent* ImpactSound );
		ParticleSystem* GetWeaponSpecificImpactEffect( SFXPhysicalMaterialImpactEffects* ImpactEffects );
		ParticleSystem* GetImpactEffect( PhysicalMaterial* PhysMat );
		void ActivateImpactPSC( ParticleSystem* Template, ImpactInfo Impact, SFXObjectPool* Pool, ParticleSystemComponent* ImpactPSC );
		void SpawnImpactEffects( ImpactInfo Impact, PhysicalMaterial* ParentPhysMaterial, ParticleSystem* ImpactEffect );
		void ProcessInstantHit( Byte FiringMode, ImpactInfo Impact, Controller* CheckPlayer, Vector LineDir, Vector WeapLoc, BioPawn* PossiblyHitPawn, BioPlayerController* PC, Class* DamageTypeToUse, BioAiController* AI, Vector ClosestPoint, Float MomentumMag );
		ImpactInfo CalcWeaponFire( Vector StartTrace, Vector EndTrace, Array<ImpactInfo> ImpactList, SFXPlayerCamera* Camera, Vector ToPC, Vector CamRot );
		void InstantFire();
		Int GetMaximumAllowedAmmo();
		Int GetAmmoCountInMagazine();
		Float GetFireInterval( Byte FireModeNum );
		Bool HasAnyAmmo();
		Bool HasAmmo( Byte FireModeNum, Int Amount, Float MagazineSize );
		Bool HasBurstAmmo( Byte FireModeNum );
		Bool HasSpareAmmo();
		Int AddAmmo( Int Amount, Int OldTotalAmmo );
		void PlayLowAmmoVocalization();
		void ConsumeAmmo( Byte FireModeNum, Name nmStreamingChunk, Bool bWasLowAmmo, Float fVOThreshLowAmmo, Float fCurrentAmmoRatio, Float MagazineSize, BioPlayerController* PC );
		void InitializeAmmo();
		Float GetZoomFOV( Float BaseFOV );
		Bool GetModifiedFOV( Float FOV );
		Vector GetMuzzleLoc(, SkeletalMeshComponent* WeapMesh, Vector Loc, Vector X, Vector Y, Vector Z, Rotator Rot, SFXPawn* Pawn );
		void SetWeaponRecoil( Float PitchRecoil, SFXInventoryManager* Inv );
		void SetZoomed( Bool bState, BioPlayerController* PC );
		Float GetAIAimDelay(, Float AimMultiplier, SFXPRI* PRI );
		Float GetAimError( Float Accuracy, Float AdjustedAimError, Vector2D AimErrorRange );
		Float GetPlayerAimError(, Float Accuracy );
		Rotator GetAdjustedAim( Vector StartFireLoc, Rotator AimRot, Float AimingError );
		Float GetRateOfFire(, Float fRateOfFire );
		Float GetTraceRange();
		Vector2D GetWeaponAimErrorRange(, Vector2D AimErrorRange, BioPawn* Pawn );
		Float GetWeaponRecoil(, Float fRecoil, SFXPRI* OwnerPRI );
		void ResetAmmoOnHolster();
		Float GetCurrentTotalAmmo();
		Float GetCurrentSpareAmmo();
		Float GetMaxSpareAmmo();
		Float GetMagazineSize();
		Bool OutOfAmmo();
		Class* GetDamageType( Byte FiringMode );
		void GetRangeMultiplier( Float RangeMultiplier, Float Range, Vector HitLocation, Actor* HitActor );
		void ModifyDamage( Float Multiplier, Vector HitLocation, Actor* HitActor, Float Range, Float RangeMultiplier, SFXPRI* OwnerPRI );
		Float GetFireModeBaseDamage(, Float BaseDamage );
		void NotifyUnpossessed();
		Bool UseFirstPersonCamera();
		void GetProjectileFirePosition( Vector out_ProjLoc, Vector out_ProjDir, Vector StartTrace, Vector EndTrace, ImpactInfo TestImpact );
		Vector GetPhysicalFireStartLoc( Vector AimDir );
		Projectile* ProjectileFire(, BioPlayerController* PC, Vector ProjLoc, Vector ProjDir, SFXProjectile* SpawnedProjectile );
		void ForceEndFire();
		void EndFire( Byte FireModeNum );
		void StartBurstFire( Byte FireModeNum, Float fBurstTime );
		void BurstRefireTimer();
		void InitDefaultDecalProperties();
		void ScaleWeapon( Int Level );
		Float CalculateStaticBonus();
		void PostBeginPlay();
		void OnWeaponUnequip( SFXWeapon* Weapon );
		void OnWeaponEquip( SFXWeapon* Weapon );
		void OnWeaponReload( SFXWeapon* Weapon );
		Float GetDamageVocProbabilityMod();
		void OnWeaponImpact( SFXWeapon* Weapon, ImpactInfo Impact );
	};

	class SFXHeavyWeapon: public SFXWeapon
	{
		DECLARE_PACKAGE_CLASS( SFXHeavyWeapon, SFXWeapon, SFXGame )

	public:

		void PlayLowAmmoVocalization();
		Int AddHeavyAmmo( Int Ammo, Int OldCount );
		void ScaleWeapon( Int Level );
		Float GetCurrentSpareAmmo();
		Int AddAmmo( Int Amount );
		void ConsumeAmmo( Byte FireModeNum );
	};

	enum EDurationType
	{
		DurationType_Instant,
		DurationType_Temporary,
	};

	class SFXGameEffect: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect, Object, SFXGame )

	public:

		Float Duration; //offset = 60, size = 4
		Float CurrentTime; //offset = 64, size = 4
		Byte DurationType; //offset = 68, size = 1
		Float EffectValue; //offset = 72, size = 4
		Actor* Owner; //offset = 76, size = 4
		Controller* Instigator; //offset = 80, size = 4
		Name Category; //offset = 84, size = 8
		Bool bStacking: 1; //offset = 92, size = 4
		Bool bVisited: 1; //offset = 92, size = 4
		Bool bSendCompletionEvent: 1; //offset = 92, size = 4
		Name CompletionName; //offset = 96, size = 8

		void OnUnpaused();
		void OnPaused();
		void OnCombatEnd();
		void OnRemoved( BioPawn* OwnerPawn );
		void OnUpdate( Float DeltaSeconds );
		void OnApplied();
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
		void GetStrongerEffect( SFXGameEffect* Effect );
		Bool HasExpired();
	};

	class SFXModule_GameEffectManager: public SFXModule
	{
		DECLARE_PACKAGE_CLASS( SFXModule_GameEffectManager, SFXModule, SFXGame )

	public:

		Array<SFXGameEffect*> GameEffects; //offset = 68, size = 12

		void UnpauseEffectsByType( Class* EffectClass, Int idx, SFXGameEffect* Effect );
		void PauseEffectsByType( Class* EffectClass, Int idx, SFXGameEffect* Effect );
		SFXGameEffect* GetFirstEffectOfType( Class* EffectClass, SFXGameEffect* Effect );
		void OnCombatEnd( SFXGameEffect* Effect );
		Float GetEffectValue( Class* EffectClass, Float baseValue, SFXGameEffect* Effect, Float StackValue, Float NonStackValue );
		void RemoveAllEffects( Int idx, SFXGameEffect* Effect );
		void RemoveEffectsByTypeAndCategory( Class* EffectClass, Name Category, Int idx, SFXGameEffect* Effect );
		void UpdateEffectsByCategory( Array<Class*> EffectClasses, Name Category, Controller* Instigator, Int idx, SFXGameEffect* Effect, Class* EffectClass );
		void RemoveEffectsByCategory( Name Category, Int idx, SFXGameEffect* Effect );
		void RemoveEffectsByType( Class* EffectClass, Int idx, SFXGameEffect* Effect );
		void RemoveEffect( SFXGameEffect* Effect );
		SFXGameEffect* CreateEffect( Class* EffectClass, Name Category, Float Duration, Byte DurationType, Float EffectValue, Controller* Instigator, SFXGameEffect* Effect );
		Bool HasEffectOfTypeAndCategory( Class* EffectClass, Name Category, SFXGameEffect* Effect );
		Bool HasEffectOfCategory( Name Category, SFXGameEffect* Effect );
		Bool HasEffectOfType( Class* EffectClass, SFXGameEffect* Effect );
		Bool FindBestEffect( Class* EffectClass, SFXGameEffect* BestEffect, SFXGameEffect* Effect );
		void Tick( Float DeltaSeconds, SFXGameEffect* Effect, SFXGameEffect* BestEffect, Int idx );
	};

	class SFXGameEffect_AIAccuracyPenalty: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_AIAccuracyPenalty, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXSeqEvt_EnteringStasis: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_EnteringStasis, SequenceEvent, SFXGame )

	public:

		void RegisterEvent();
	};

	class SFXSeqEvt_LeavingStasis: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_LeavingStasis, SequenceEvent, SFXGame )

	public:

		void RegisterEvent();
	};

	const char* SFX_SAVE_HOTKEY_SLOT_COUNT = 8;

	class BioPlayerControllerSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioPlayerControllerSaveObject, BioBaseSaveObject, SFXGame )

	public:

		Int m_nLastWeapon; //offset = 72, size = 4
		Name m_nmLastPower; //offset = 76, size = 8
		Int m_lstHotKeyPawns[12]; //offset = 84, size = 4
		Int m_lstHotKeyEvents[12]; //offset = 132, size = 4
		Name m_aHotKeyPawns[8]; //offset = 180, size = 8
		Int m_aHotKeyPowers[8]; //offset = 244, size = 4
		Int m_nHeavyWeaponMagAmmo; //offset = 276, size = 4
		Int m_nHeavyWeaponSpareAmmo; //offset = 280, size = 4
		String m_sHeavyWeapon; //offset = 284, size = 12

		void LoadObject( Object* O, BioPlayerController* oController, Int I, SFXHeavyWeapon* ExistingWpn, SFXHeavyWeapon* Wpn );
		void SaveObject( Object* O, BioPlayerController* oController, Int I );
	};

	class BioAIDesignController: public BioAiController
	{
		DECLARE_PACKAGE_CLASS( BioAIDesignController, BioAiController, SFXGame )

	public:
	};

	class BioAnimNodeBlendAdditiveAim: public BioAnimNodeBlendAdditive
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendAdditiveAim, BioAnimNodeBlendAdditive, SFXGame )

	public:
	};

	class BioAnimNodeBlendAdditivePower: public BioAnimNodeBlendAdditive
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendAdditivePower, BioAnimNodeBlendAdditive, SFXGame )

	public:
	};

	class BioAnimNodeBlendAdditiveWeaponEquip: public BioAnimNodeBlendAdditive
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendAdditiveWeaponEquip, BioAnimNodeBlendAdditive, SFXGame )

	public:
	};

	class BioAnimNodeBlendByAnimationStateTracking: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByAnimationStateTracking, AnimNodeBlendList, SFXGame )

	public:
	};

	class BioAnimNodeBlendByBiotic: public AnimNodeBlendList
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByBiotic, AnimNodeBlendList, SFXGame )

	public:
	};

	class BioAnimNodeBlendByMount: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByMount, AnimNodeBlendBase, SFXGame )

	public:
	};

	class BioAnimNodeBlendByTargetingPercentage: public AnimNodeBlend
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendByTargetingPercentage, AnimNodeBlend, SFXGame )

	public:
	};

	class BioAnimNodeBlendCombatAction: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendCombatAction, AnimNodeBlendBase, SFXGame )

	public:
	};

	class BioAnimNodeBlendScalarHoppingBehavior: public BioAnimNodeBlendScalarBehavior
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendScalarHoppingBehavior, BioAnimNodeBlendScalarBehavior, SFXGame )

	public:
	};

	class BioAnimNodeBlendStateHoppingBehavior: public BioAnimNodeBlendStateBehavior
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendStateHoppingBehavior, BioAnimNodeBlendStateBehavior, SFXGame )

	public:
	};

	class BioAnimNodeBlendWeaponEquip: public AnimNodeBlendBase
	{
		DECLARE_PACKAGE_CLASS( BioAnimNodeBlendWeaponEquip, AnimNodeBlendBase, SFXGame )

	public:
	};

	class BioAnimNotify_CustomAction: public AnimNotify_Scripted
	{
		DECLARE_PACKAGE_CLASS( BioAnimNotify_CustomAction, AnimNotify_Scripted, SFXGame )

	public:

		Name Info; //offset = 60, size = 8

		void Notify( Actor* Owner, AnimNodeSequence* AnimSeqInstigator, BioPawn* Pawn );
	};

	class BioAnimNotifySound: public AnimNotify
	{
		DECLARE_PACKAGE_CLASS( BioAnimNotifySound, AnimNotify, SFXGame )

	public:
	};

	class BioAppearanceItemSimple: public BioAppearanceItem
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceItemSimple, BioAppearanceItem, SFXGame )

	public:
	};

	class BioAppearanceItemBioAmp: public BioAppearanceItemSimple
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceItemBioAmp, BioAppearanceItemSimple, SFXGame )

	public:
	};

	class BioVisualImpactSet: public Object
	{
		DECLARE_PACKAGE_CLASS( BioVisualImpactSet, Object, SFXGame )

	public:
	};

	class BioVISSimple: public BioVisualImpactSet
	{
		DECLARE_PACKAGE_CLASS( BioVISSimple, BioVisualImpactSet, SFXGame )

	public:

		RawDistributionVector rRotationBias; //offset = 60, size = 28
	};

	class BioVISWeapon: public BioVISSimple
	{
		DECLARE_PACKAGE_CLASS( BioVISWeapon, BioVISSimple, SFXGame )

	public:
	};

	class BioAppearanceItemOmniTool: public BioAppearanceItemSophisticated
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceItemOmniTool, BioAppearanceItemSophisticated, SFXGame )

	public:
	};

	class BioWeaponVFXAppearance: public Object
	{
		DECLARE_PACKAGE_CLASS( BioWeaponVFXAppearance, Object, SFXGame )

	public:
	};

	class BioAppearanceItemXMod: public BioAppearanceItemSimple
	{
		DECLARE_PACKAGE_CLASS( BioAppearanceItemXMod, BioAppearanceItemSimple, SFXGame )

	public:
	};

	class BioAreaTransition: public TriggerVolume
	{
		DECLARE_PACKAGE_CLASS( BioAreaTransition, TriggerVolume, SFXGame )

	public:

		Name sMoveToArea; //offset = 568, size = 8
		Name sMoveToStartPoint; //offset = 576, size = 8

		void Touch( Actor* Other, PrimitiveComponent* OtherComp, Vector HitLocation, Vector HitNormal );
	};

	struct VisualEffect
	{
		BioVFXTemplate* Template; //offset = 0, size = 4
		BioVisualEffect* Effect; //offset = 4, size = 4
	};

	class SFXPawn: public BioPawn
	{
		DECLARE_PACKAGE_CLASS( SFXPawn, BioPawn, SFXGame )

	public:

		ParticleSystem* PS_HeadGib; //offset = 1996, size = 4
		ParticleSystem* PS_LimbGib; //offset = 2000, size = 4
		Bool bIsTalking: 1; //offset = 2004, size = 4
		Bool bSupportsVisibleWeapons: 1; //offset = 2004, size = 4
		Name nmMuzzleSocketName; //offset = 2008, size = 8
		Name nmShellCasingSocketName; //offset = 2016, size = 8
		SFXVocalizationBank* VocalizationBankOverride; //offset = 2024, size = 4
		PrettyName PrettyName; //offset = 2028, size = 4
		VisualEffect FireChargingVFX; //offset = 2032, size = 8
		ScreenShakeStruct FootstepShake; //offset = 2040, size = 112
		ForceFeedbackWaveform* FootstepForceFeedback; //offset = 2152, size = 4

		void CreatePlayerSquadWeapons( SFXPlayerSquadLoadoutData* ChkLoadout, String LoadoutWeapons, Byte GroupIdx, BioGlobalVariableTable* VarTable, Int I );
		ReturnValue GetPrettyName();
		String GetShieldTypeAsDisplayString(, SFXShield_Base* Shields );
		Bool CanUseWeapon( Class* WeaponClass, SFXInventoryManager* oInventory, SFXLoadoutData* ChkLoadout, Class* LoadoutWeapon, BioGlobalVariableTable* VarTable, SFXPlayerSquadLoadoutData* SquadLoadout );
		void PlayFireCharging();
		void CreateVisualEffect( BioVFXTemplate* Template, BioVisualEffect* Effect );
		void TalkingTimout();
		void SetTalking();
		void PlayStepEffect( Int FootDown, TraceHitInfo HitInfo, Float Loudness, PlayerController* P, BioPlayerController* PC );
	};

	enum EHelmetPart
	{
		HelmetPart_Helmet,
		HelmetPart_Visor,
	};

	enum EPlayerAppearanceType
	{
		PlayerAppearanceType_Parts,
		PlayerAppearanceType_Full,
	};

	enum ENotorietyType
	{
		NotorietyType_None,
		NotorietyType_Survivor,
		NotorietyType_Warhero,
	};

	enum EOriginType
	{
		OriginType_None,
		OriginType_Spacer,
		OriginType_Colony,
	};

	struct ScarInfo
	{
		Vector2D Threshold; //offset = 0, size = 8
		String Emissive; //offset = 8, size = 12
		String Normal; //offset = 20, size = 12
		String EyeEmissive; //offset = 32, size = 12
		String FemaleEmissive; //offset = 44, size = 12
		String FemaleNormal; //offset = 56, size = 12
		String FemaleEyeEmissive; //offset = 68, size = 12
		LinearColor Color; //offset = 80, size = 16
	};

	class SFXPawn_Player: public SFXPawn
	{
		DECLARE_PACKAGE_CLASS( SFXPawn_Player, SFXPawn, SFXGame )

	public:
		struct Ragdoll
		{
			/*
			BeginState
			*/
		};

		struct Dying
		{
			/*
			Timer
			BeginState
			*/
		};


		Array<CustomizableElement> CasualAppearances; //offset = 2156, size = 12
		Array<CustomizableElement> FullBodyAppearances; //offset = 2168, size = 12
		Array<CustomizableElement> TorsoAppearances; //offset = 2180, size = 12
		Array<CustomizableElement> ShoulderAppearances; //offset = 2192, size = 12
		Array<CustomizableElement> ArmAppearances; //offset = 2204, size = 12
		Array<CustomizableElement> LegAppearances; //offset = 2216, size = 12
		Array<CustomizableElement> HelmetAppearances; //offset = 2228, size = 12
		Array<CustomizableElement> SpecAppearances; //offset = 2240, size = 12
		Array<CustomizableElement> Tint1Appearances; //offset = 2252, size = 12
		Array<CustomizableElement> Tint2Appearances; //offset = 2264, size = 12
		Array<CustomizableElement> PatternAppearances; //offset = 2276, size = 12
		Array<CustomizableElement> PatternColorAppearances; //offset = 2288, size = 12
		Int N7ArmourName; //offset = 2300, size = 4
		Int N7ArmourDescription; //offset = 2304, size = 4
		Bool bUseCasualAppearance: 1; //offset = 2308, size = 4
		Byte CombatAppearance; //offset = 2312, size = 1
		Byte Origin; //offset = 2313, size = 1
		Byte Notoriety; //offset = 2314, size = 1
		Int CasualID; //offset = 2316, size = 4
		Int FullBodyID; //offset = 2320, size = 4
		Int TorsoID; //offset = 2324, size = 4
		Int ShoulderID; //offset = 2328, size = 4
		Int ArmID; //offset = 2332, size = 4
		Int LegID; //offset = 2336, size = 4
		Int SpecID; //offset = 2340, size = 4
		Int Tint1ID; //offset = 2344, size = 4
		Int Tint2ID; //offset = 2348, size = 4
		Int PatternID; //offset = 2352, size = 4
		Int PatternColorID; //offset = 2356, size = 4
		Int HelmetID; //offset = 2360, size = 4
		Int OverrideHelmetID; //offset = 2364, size = 4
		String FemalePhysAsset; //offset = 2368, size = 12
		String FemaleHeadMesh; //offset = 2380, size = 12
		String FirstName; //offset = 2392, size = 12
		Int LastName; //offset = 2404, size = 4
		String PlayerClassName; //offset = 2408, size = 12
		SFXCharacterClass* PlayerClass; //offset = 2420, size = 4
		Float OutOfAmmoTimestamp; //offset = 2424, size = 4
		Float OutOfAmmoSwapThreshold; //offset = 2428, size = 4
		Array<ScarInfo> Scars; //offset = 2432, size = 12
		Bool bOverrideHideScars: 1; //offset = 2444, size = 4
		Bool m_bHasBreather: 1; //offset = 2444, size = 4
		Bool bInPersonalization: 1; //offset = 2444, size = 4
		Int CosmeticSurgeryPlotID; //offset = 2448, size = 4
		Float TotalXP; //offset = 2452, size = 4
		ScreenShakeStruct HitShake; //offset = 2456, size = 112
		Texture2D* m_GUI_Icon; //offset = 2568, size = 4
		Texture2D* m_GUI_Icon_Dead; //offset = 2572, size = 4
		String FaceCode; //offset = 2576, size = 12
		String m_sWwiseAudioComponentLabel; //offset = 2588, size = 12
		String m_sWwiseRTPCNameUseCasual; //offset = 2600, size = 12
		ForceFeedbackWaveform* CoverForceFeedback; //offset = 2612, size = 4
		WwiseEvent* CoverEnterSound; //offset = 2616, size = 4

		void CreateWeapons( SFXLoadoutData* ChkLoadout, Class* WeaponClass, SFXPlayerSquadLoadoutData* PlayerLoadout, SFXEngine* Engine );
		void SetCombatState_Inactive();
		void SetCombatState_Active();
		void SetCombatState( Bool bDraw );
		void SetRTPCHelmetIsEnabled( WwiseAudioComponent* WwiseComponent );
		Bool SwitchToBackupWeapon( SFXWeapon* PreferredWeapon, SFXInventoryManager* InventoryManager, SFXWeapon* BestWeapon, SFXWeapon* Weap, BioPlayerController* PC, BioPlayerInput* BPInput );
		void PlayerCoverAcquired( CovPosInfo CovInfo );
		Texture2D* GetGUIIcon( Bool bDeadIcon );
		void PlayDying( Class* DamageType, Vector HitLoc, PlayerController* PC );
		void PlayShieldHit( Float Damage, Controller* InstigatedBy, Vector HitLocation, Class* DamageType, Vector Momentum, TraceHitInfo HitInfo, Class* SFXDT, PlayerController* PC );
		Bool PlayAnimatedReaction( Byte CustomAction, Controller* InstigatedBy, Bool bPlayImpact, Vector HitLocation, Vector HitNormal, TraceHitInfo HitInfo, Bool bDeathReaction, SFXPlayerController* PC, SFXCustomAction_DamageReaction* Action );
		void CheckEnterCombat( BioPlayerController* PC, BioPlayerInput* Input );
		void AutoMapPC( MassEffectGuiManager* oGM, SFXSFHandler_PCPowerWheel* oPowerWheel, BioPlayerController* BPC, SFXPower* Power, SFXPower* Power2, Name nmPawn, Int I, Int J );
		void AutoMapXbox( Array<Name> MappedPowers, BioPlayerInput* BPI, Int idx, SFXPower* Power );
		void ApplyBonuses( BioWorldInfo* World, SFXGame* Game, Int Index, BioPawn* Member, SFXShield_Base* Shield );
		void AutoMap();
		SFXPower* FindPower( Name nmPower, BioPower* oPower );
		void PossessedBy( Controller* C, Bool bVehicleTransition, SFXModule_GameEffectManager* Manager );
		void PostBeginPlay( Object* DynamicLoadedClassObject, Class* CharacterClass );
		void AddPlayerInventory( SFXInventoryManager* InventoryManager, SFXLoadoutData* ChkLoadout );
		Int GetScaledLevel();
		void CopyPawnAppearance( BioPawn* SourcePawn, SFXPawn_Player* SourcePlayer, SFXPower* Power, SFXPower* Power2 );
		void ProcessViewRotation( Float DeltaTime, Rotator out_ViewRotation, Rotator out_DeltaRot, Vector CamRot, Vector CamCross, Vector PlayerRot, Float CamDot, Float Angle );
		void ForceHelmetVisibility( Bool bHelmetVisible );
		void ForceShowHelmet( Bool bShowHelmet, Int idx, CustomizableElement Helmet, String HelmetName, String ChkName );
		void ForceHideHelmet( Bool bHideHelmet );
		void PlayHit( Float Damage, Controller* InstigatedBy, Vector HitLocation, Class* DamageType, Vector Momentum, TraceHitInfo HitInfo, SFXPlayerCamera* Camera );
		void UpdateWeaponVisibility( SFXWeapon* ChkWeapon );
		Bool CreateWeapon( Class* WeaponClass, Bool bEquipWeapon, Bool bRetval );
		void UpdateParameters( SkeletalMeshComponent* MeshCmpt, MaterialInstanceConstant* MIC, ScalarParameterValue SParam, VectorParameterValue VParam, Int MeshElementID, MaterialInterface* CurrentMaterial, Int ParagonPips, Int RenegadePips, BioGlobalVariableTable* VarTable, Int NetPips );
		void GetParagonRenegadeNetPips( Int ParagonPips, Int RenegadePips, Int ParagonPoints, Int RenegadePoints, Float PipValue, Float TotalParagonPipValue, Float TotalRenegadePipValue );
		void ApplyScarParameters( Array<ScarInfo> InScars, Int InNetAlignment, BioPawn* Pawn, ScarInfo Scar, Texture2D* Emissive, Texture2D* Normal, Texture2D* Eyes, String EmissiveString, String NormalString, String EyesString, LinearColor ColorValue, MaterialInstanceConstant* MIC, MaterialInterface* Material, SkeletalMeshComponent* InHead, Int nScarBucket );
		void UpdateBodyAppearance( SkeletalMesh* SkelMesh, MaterialInterface* MaterialOverride, Bool bUpdatePhysicsAsset, PhysicsAsset* PhysAsset, Array<SkeletalMesh*> MeshParts, Int NewHelmetID, Int I, Bool bHideHead, Bool bHideHair, CustomizableElement Element, SFXCompositeSkeletalMesh* CompositeMesh, WwiseAudioComponent* PawnAudioComponent, Bool bPreserveAnimation, Bool bDoMergeMeshes, Name nmActiveEffectsMaterial );
		void RefreshMaterialInstances( Int idx );
		void ClearMaterialInstances();
		void UpdateAppearance();
		void UpdateHairAppearance();
		void UpdateGameEffects( Array<Class*> Effects, SFXModule_GameEffectManager* Manager );
		void GetGameEffects( Int Id, Array<CustomizableElement> Meshes, Array<Class*> Effects, Int idx, Class* Effect, String EffectName );
		void ValidateAppearanceIDs();
		MaterialInstanceConstant* EnsureMIC( SkeletalMeshComponent* MeshCmpt, Int MatIdx, MaterialInstanceConstant* MIC, MaterialInterface* Parent );
		SkeletalMesh* GetHelmetMesh( Int Id, Byte Part, Array<CustomizableElement> Meshes, CustomizableElement Element, SkeletalMesh* SkelMesh, String MeshName, Int idx );
		MaterialInstance* GetMaterialOverride( Int Id, Array<CustomizableElement> Meshes, CustomizableElement Element, MaterialInstance* MaterialOverride, String MaterialOverrideName, Int idx );
		SkeletalMesh* GetMesh( Int Id, Array<CustomizableElement> Meshes, CustomizableElement Element, SkeletalMesh* SkelMesh, String MeshName, Int idx );
		void LoadShaderCacheForObject( String BaseObjectName, String sPackageName, Int nTokenIndex );
		String GetFullName();
	};

	class BioSeqEvt_ArtPlaceableUsed: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_ArtPlaceableUsed, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_ArtPlaceablePlotFail: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_ArtPlaceablePlotFail, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_ArtPlaceableTransition: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_ArtPlaceableTransition, SequenceEvent, SFXGame )

	public:
	};

	class BioArtPlaceableBehaviorSaveObject: public BioActorBehaviorSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableBehaviorSaveObject, BioActorBehaviorSaveObject, SFXGame )

	public:

		Float m_fHealth; //offset = 80, size = 4
		Float m_fCurrentHealth; //offset = 84, size = 4
		Bool Enabled: 1; //offset = 88, size = 4
		Bool m_bIsDestroyed: 1; //offset = 88, size = 4
		Bool m_bUseCaseOverride: 1; //offset = 88, size = 4
		Bool m_bPlayerOnly: 1; //offset = 88, size = 4
		Bool m_bSkillGameFailed: 1; //offset = 88, size = 4
		Bool m_bSkillGameXpAwarded: 1; //offset = 88, size = 4
		Bool m_bTargetable: 1; //offset = 88, size = 4
		Bool m_bTargetableOverride: 1; //offset = 88, size = 4
		Name CurrentFSMStateName; //offset = 92, size = 8
		Name m_State0; //offset = 100, size = 8
		Name m_State1; //offset = 108, size = 8
		Byte m_eUseCase; //offset = 116, size = 1
		Byte m_SkillDifficulty; //offset = 117, size = 1

		void LoadObject( Object* O, BioArtPlaceableBehavior* objBehavior, BioArtPlaceableType* Type );
		void SaveObject( Object* O, BioArtPlaceableBehavior* objBehavior, BioArtPlaceable* Obj, BioArtPlaceableType* Type );
	};

	class BioSeqEvt_ArtPlaceableSkillGameFailed: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_ArtPlaceableSkillGameFailed, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_ArtPlaceableSkillGameSuccess: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_ArtPlaceableSkillGameSuccess, SequenceEvent, SFXGame )

	public:
	};

	class BioArtPlaceableContainerType: public BioArtPlaceableType
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableContainerType, BioArtPlaceableType, SFXGame )

	public:
	};

	class BioArtPlaceableCoverInterface: public BioCoverInterface
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableCoverInterface, BioCoverInterface, SFXGame )

	public:
	};

	class BioDamageComponent: public BioBaseDamageComponent
	{
		DECLARE_PACKAGE_CLASS( BioDamageComponent, BioBaseDamageComponent, SFXGame )

	public:
	};

	class BioArtPlaceableDamageComponent: public BioDamageComponent
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableDamageComponent, BioDamageComponent, SFXGame )

	public:
	};

	class BioArtPlaceableDoorType: public BioArtPlaceableType
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableDoorType, BioArtPlaceableType, SFXGame )

	public:
	};

	class BioArtPlaceableUseableType: public BioArtPlaceableType
	{
		DECLARE_PACKAGE_CLASS( BioArtPlaceableUseableType, BioArtPlaceableType, SFXGame )

	public:
	};

	class BioAttributesItemArmor: public BioAttributesItemXModdable
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemArmor, BioAttributesItemXModdable, SFXGame )

	public:
	};

	class BioAttributesItemVehicleBase: public BioAttributesItemXModdable
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemVehicleBase, BioAttributesItemXModdable, SFXGame )

	public:
	};

	class BioAttributesItemWeapon: public BioAttributesItemXModdable
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemWeapon, BioAttributesItemXModdable, SFXGame )

	public:
	};

	class BioAttributesItemWeaponMelee: public BioAttributesItemWeapon
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemWeaponMelee, BioAttributesItemWeapon, SFXGame )

	public:
	};

	class BioAttributesItemWeaponRanged: public BioAttributesItemWeapon
	{
		DECLARE_PACKAGE_CLASS( BioAttributesItemWeaponRanged, BioAttributesItemWeapon, SFXGame )

	public:
	};

	class BioAttributesWeapon: public BioAttributes
	{
		DECLARE_PACKAGE_CLASS( BioAttributesWeapon, BioAttributes, SFXGame )

	public:
	};

	class BioAudioRoomTrigger: public Volume
	{
		DECLARE_PACKAGE_CLASS( BioAudioRoomTrigger, Volume, SFXGame )

	public:
	};

	class BioAudioVolume: public Volume
	{
		DECLARE_PACKAGE_CLASS( BioAudioVolume, Volume, SFXGame )

	public:
	};

	class BioAudioVolumeTimer: public Info
	{
		DECLARE_PACKAGE_CLASS( BioAudioVolumeTimer, Info, SFXGame )

	public:
	};

	struct ActivityProp
	{
		StaticMesh* m_oStaticMesh; //offset = 0, size = 4
		Name m_nAttachlocation; //offset = 4, size = 8
	};

	class BioBaseActivity: public Object
	{
		DECLARE_PACKAGE_CLASS( BioBaseActivity, Object, SFXGame )

	public:

		Name m_nAcitivityName; //offset = 60, size = 8
		Array<AnimSet*> m_aoActivityAnimSets; //offset = 68, size = 12
		Bool m_bUseEnterExitAnims: 1; //offset = 80, size = 4
		Array<ActivityProp> m_aProps; //offset = 84, size = 12
	};

	class BioBaseSquadSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioBaseSquadSaveObject, BioBaseSaveObject, SFXGame )

	public:

		void LoadObject( Object* O );
		void SaveObject( Object* O );
	};

	class BioFaction_BaseSquad: public BioFaction
	{
		DECLARE_PACKAGE_CLASS( BioFaction_BaseSquad, BioFaction, SFXGame )

	public:
	};

	class BioSeqEvt_TakeDamage: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_TakeDamage, SequenceEvent, SFXGame )

	public:

		Float MinDamageAmount; //offset = 280, size = 4
		Float DamageThreshold; //offset = 284, size = 4
		Array<Class*> DamageTypes; //offset = 288, size = 12
		Array<Class*> IgnoreDamageTypes; //offset = 300, size = 12
		Float CurrentDamage; //offset = 312, size = 4
		Float CurrentMitigatedDamage; //offset = 316, size = 4

		void HandleDamage( Actor* InOriginator, Actor* InInstigator, Class* inDamageType, Float inAmount, Float inMitigatedAmount );
		Bool IsValidDamageType( Class* inDamageType, Bool bValid );
	};

	class BioCameraBehaviorFlourish: public BioCameraBehavior
	{
		DECLARE_PACKAGE_CLASS( BioCameraBehaviorFlourish, BioCameraBehavior, SFXGame )

	public:

		Float ZOffset; //offset = 496, size = 4
		Float SpeedYaw; //offset = 500, size = 4
		Float DesiredPitch; //offset = 504, size = 4
		Float SpeedPitch; //offset = 508, size = 4
		Float DesiredDistance; //offset = 512, size = 4
		Float SpeedDistance; //offset = 516, size = 4

		void Tick( Float TimeDelta, Vector CameraHook, Float fCurrentYaw, Float fCurrentPitch, Float fPitchAdj, Float fPitchDir, Float fRange, Float fRangeAdj, Float fRangeDir, Vector vDirection );
	};

	class BioCameraBehaviorFree: public BioCameraBehavior
	{
		DECLARE_PACKAGE_CLASS( BioCameraBehaviorFree, BioCameraBehavior, SFXGame )

	public:

		Float m_fMovementScalar; //offset = 496, size = 4
		Float m_fRotationScalar; //offset = 500, size = 4
		Bool m_bCameraLocked: 1; //offset = 504, size = 4

		void Initialize( BioPlayerController* NewOwner );
		void Tick( Float TimeDelta, Rotator rCamRot, Vector vCamDir );
	};

	enum CREDCurveSet
	{
		CREDCurve_NoReward,
		CREDCurve_Minor,
		CREDCurve_Small,
		CREDCurve_Medium,
	};

	class SFXInventoryManager: public InventoryManager
	{
		DECLARE_PACKAGE_CLASS( SFXInventoryManager, InventoryManager, SFXGame )

	public:

		Int Credits; //offset = 536, size = 4
		Int Medigel; //offset = 540, size = 4
		Int Eezo; //offset = 544, size = 4
		Int Iridium; //offset = 548, size = 4
		Int Palladium; //offset = 552, size = 4
		Int Platinum; //offset = 556, size = 4
		Int Probes; //offset = 560, size = 4
		Float CurrentFuel; //offset = 564, size = 4
		Int MaxCredits; //offset = 568, size = 4
		Int MaxEezo; //offset = 572, size = 4
		Int MaxIridium; //offset = 576, size = 4
		Int MaxPalladium; //offset = 580, size = 4
		Int MaxPlatinum; //offset = 584, size = 4
		Int MaxMedigel; //offset = 588, size = 4
		Int MaxProbes; //offset = 592, size = 4
		Float MaxFuel; //offset = 596, size = 4
		Float FuelEfficiency; //offset = 600, size = 4
		Class* CurrentWeaponSelection; //offset = 604, size = 4
		Float Base_Acc_Standing; //offset = 608, size = 4
		Float Base_Acc_Zoom; //offset = 612, size = 4
		Float AccMod_Move; //offset = 616, size = 4
		Float AccMod_ViewTurn; //offset = 620, size = 4
		Float AccMod_Crouched; //offset = 624, size = 4
		Float AccMod_MouseMultiplier; //offset = 628, size = 4
		Float AccMod_MaxCameraLoss; //offset = 632, size = 4
		Float Base_Interp_Speed; //offset = 636, size = 4
		Float InterpMod_Move; //offset = 640, size = 4
		Float InterpMul_ViewTurn; //offset = 644, size = 4
		Vector2D InterpRange; //offset = 648, size = 8
		Float Accuracy; //offset = 656, size = 4
		Rotator AccuracyLastViewRot; //offset = 660, size = 12
		Bool bWeaponFired: 1; //offset = 672, size = 4
		Float AccMod_WeaponFired; //offset = 676, size = 4
		Float TimeSinceLastFire; //offset = 680, size = 4
		Rotator WeaponRecoilOffset; //offset = 684, size = 12
		Rotator TotalRecoil; //offset = 696, size = 12
		Rotator Drift; //offset = 708, size = 12
		Rotator DriftTarget; //offset = 720, size = 12
		Float DriftPitch; //offset = 732, size = 4
		Float DriftYaw; //offset = 736, size = 4
		Float DriftInterpSpeed; //offset = 740, size = 4
		Float DriftInterpResetSize; //offset = 744, size = 4
		Float DriftInterpMinSize; //offset = 748, size = 4
		Float DriftNoiseMagPitch; //offset = 752, size = 4
		Float DriftNoiseMagYaw; //offset = 756, size = 4
		Float DriftRampUpRate; //offset = 760, size = 4
		Float DriftRampUpDelay; //offset = 764, size = 4

		void StartFire( Byte FireModeNum );
		Bool GrantScaledCredits( Int nSize, Bool i_bTickResource, Name nmColumnName, BioPlayerSquad* oPlayerSquad, Int PlayerLevel, Int nGrantQuantity, BioPlayerController* oController, BioWorldInfo* oWorldInfo, SFXEngine* oEngine );
		Int GetMaxProbes();
		Int GetMaxMedigel();
		void SetMaxFuel( Float F );
		Float GetMaxFuel(, Float TecBonus );
		Int GetResource( Byte eInvResType );
		void AdjustResource( Byte eInvResType, Int Amount, Bool bShowNotification, Bool bIgnoreBudget, Int DisplayAmount, Int NewAmount, BioPlayerController* PC, String sTelemetryParam );
		void EmptyInventory( Inventory* oListItem );
		void ProcessDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser, SFXShield_Base* Shield, SFXArmor_Base* Armor );
		Inventory* CreateInventory( Class* NewInventoryItemClass, Bool bDoNotActivate, Inventory* Inv );
		SFXWeapon* GetWeaponInSlot( Byte Slot, Bool bIgnoreWielded, SFXWeapon* Weap );
		void SetWeaponIfAvailable( SFXWeapon* WeapToSwitch, SFXWeapon* Weap );
		void SetWeaponFromSlot( Byte Slot, SFXWeapon* Weap );
		void SetWeaponBySelected( SFXWeapon* Weap, SFXWeapon* WeapToSet );
		void ChangedWeapon( SFXWeapon* Weapon, BioPawn* Pawn );
		Bool CancelWeaponChange();
		Float GetPlayerCrosshairValue(, SFXWeapon* Weapon, Float CrosshairScale, BioPawn* Pawn );
		Float GetPlayerNormalizedAccuracy();
		void UpdatePlayerAccuracy( Float DeltaTime, Float InaccuracyPct, Float InterpSpeed, Float RotRateRatio, Float SpeedRatio, BioPawn* Pawn, Rotator DeltaRot, Rotator ViewRot, Vector ViewLoc, SFXWeapon* Weapon, PlayerInput* Input, Float fAccuracyBonus, Float AccFireTimeMultiplier );
		void DebugDrawWeaponAccuracy( Float AngleRad, SFXWeapon* Weapon, Vector StartTrace, Vector EndTrace, Vector Dir );
		void Tick( Float DeltaTime, BioPawn* Pawn, SFXWeapon* Weapon );
		void UpdateKickbackFade( Float DeltaTime, Rotator out_DeltaRot, SFXWeapon* Weapon, Rotator DeltaRecoil, Float fFadeSpeed, Float fMinYaw, Rotator CurrentKickback );
		Bool ApplySniperDrift( Float DeltaTime, SFXWeapon* Weapon, Bool IsPitchPositive, Float RangeScale, Float Range, Actor* Target, Bool bHasTargetInRange );
		void UpdateKickback( Float DeltaTime, Rotator out_DeltaRot, Rotator DeltaRecoil, SFXWeapon* Weapon );
		void SetWeaponRecoil( Float PitchRecoil, Float YawRecoil, Float BaseRecoilCap, BioPawn* Pawn, SFXWeapon* Weapon, Float fOscillation );
		void SwitchToBestWeapon( Bool bForceADifferentWeapon );
	};

	class SFXPlayerCamera: public SFXCameraNativeBase
	{
		DECLARE_PACKAGE_CLASS( SFXPlayerCamera, SFXCameraNativeBase, SFXGame )

	public:

		SFXCameraTransition_FaceTarget* FaceTargetTransition; //offset = 1080, size = 4
		SFXCameraMode* FreeCam; //offset = 1084, size = 4
		Float DefaultTransitionTime; //offset = 1088, size = 4
		InterpCurveFloat StandardCurve; //offset = 1092, size = 16
		InterpCurveFloat SlowRampUpCurve; //offset = 1108, size = 16
		InterpCurveFloat TaperOverTimeCurve; //offset = 1124, size = 16
		InterpCurveFloat LongEaseInCurve; //offset = 1140, size = 16
		SFXCameraModifier_ScreenShake* ScreenShakeModifier; //offset = 1156, size = 4
		Bool bCurrentTransitionIsModal: 1; //offset = 1160, size = 4
		Bool bDebugging: 1; //offset = 1160, size = 4
		Bool m_bLastConstrainAspect: 1; //offset = 1160, size = 4
		Rotator KickBackModifier; //offset = 1164, size = 12
		Float TransitionTimeout; //offset = 1176, size = 4
		Float LastTransitionTime; //offset = 1180, size = 4
		Float m_fLastAspectRatio; //offset = 1184, size = 4

		void SetBaseRotation( Rotator NewRotation );
		Rotator GetBaseRotation();
		void SwitchTo( SFXCameraMode* NewMode );
		void SetBehavior( SFXCameraMode* Mode, SFXCameraMode_Interpolate* NewTransition, Float Time, Bool PreserveTarget, SFXCameraMode* PreviousBehavior, SFXCameraMode_Interpolate* PrevTransition );
		void UpdateCameraManager( Float fDeltaTime, Float fAspectRatio, TPOV POV, SFXCameraMode_Interpolate* Transition );
		void PickCameraMode( Float DeltaTime, Int PreserveTarget, BioPlayerController* PC, BioPlayerInput* Input, Bool bNoChange, SFXCameraMode* NewCameraMode, SFXCameraMode_Interpolate* Transition, Float TransitionTime );
		void PlayCameraTransition( SFXCameraMode_Interpolate* Transition, Float Time, BioPlayerController* PC, SFXGameModeManager* GMM, SFXGameModeBase* GM, Int idx );
		void RotateToFace( Vector AimPoint, Float Time );
		void UpdateViewTarget( TViewTarget OutVT, Float DeltaTime, CameraActor* CamActor, BioWorldInfo* BWorldInfo );
		CameraModifier* CreateCameraModifier( Class* ModifierClass, CameraModifier* NewMod );
		void AddScreenShake( ScreenShakeStruct Shake );
		void PostBeginPlay();
	};

	class BioCharacterImporter: public Object
	{
		DECLARE_PACKAGE_CLASS( BioCharacterImporter, Object, SFXGame )

	public:
	};

	class SFXDamageType_CheatKill: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_CheatKill, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Default: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Default, SFXDamageType, SFXGame )

	public:
	};

	enum ESFXVocalizationEventID
	{
		SFXVocalizationEvent_None,
		SFXVocalizationEvent_EnteredCombat,
		SFXVocalizationEvent_ReceivedOrder_Attack,
		SFXVocalizationEvent_ReceivedOrder_Attack_TargetValid,
		SFXVocalizationEvent_ReceivedOrder_Attack_MovingFirst,
		SFXVocalizationEvent_ReceivedOrder_Attack_KilledTarget,
		SFXVocalizationEvent_ReceivedOrder_ChangeWeapon,
		SFXVocalizationEvent_ReceivedOrder_Move,
		SFXVocalizationEvent_ReceivedOrder_Follow,
		SFXVocalizationEvent_ReceivedOrder_TakeCover,
		SFXVocalizationEvent_ReceivedOrder_Hold,
		SFXVocalizationEvent_CancellingHoldOrder,
		SFXVocalizationEvent_FailedMoveOrder,
		SFXVocalizationEvent_Attacking,
		SFXVocalizationEvent_Attacking_Henchman,
		SFXVocalizationEvent_KilledTarget_Henchman,
		SFXVocalizationEvent_LostSight,
		SFXVocalizationEvent_EnemySighted,
		SFXVocalizationEvent_MovingToCover,
		SFXVocalizationEvent_UsingPower,
		SFXVocalizationEvent_ChangingWeapon,
		SFXVocalizationEvent_Death,
		SFXVocalizationEvent_Death_NonTrivial,
		SFXVocalizationEvent_Death_Henchman,
		SFXVocalizationEvent_ReceivedDamage,
		SFXVocalizationEvent_ReceivedDamage_LowHealth,
		SFXVocalizationEvent_ReceivedDamage_ExtremelyLowHealth,
		SFXVocalizationEvent_RequireHealing,
		SFXVocalizationEvent_ShieldsDown,
		SFXVocalizationEvent_OneEnemyRemaining,
		SFXVocalizationEvent_ZeroEnemiesRemaining,
		SFXVocalizationEvent_Agitation_High,
		SFXVocalizationEvent_Agitation_Medium,
		SFXVocalizationEvent_DamageReaction_GreatPain,
		SFXVocalizationEvent_DamageReaction_OnFire,
		SFXVocalizationEvent_DamageReaction_KnockedBack,
		SFXVocalizationEvent_Falling,
		SFXVocalizationEvent_Tossed,
		SFXVocalizationEvent_Brainwashed,
		SFXVocalizationEvent_Taunt,
		SFXVocalizationEvent_Ambient,
		SFXVocalizationEvent_Power_Failed_ShieldsUp,
		SFXVocalizationEvent_Power_Failed_BarrierUp,
		SFXVocalizationEvent_Power_Failed_ArmorUp,
		SFXVocalizationEvent_Power_EnergyDrain,
		SFXVocalizationEvent_Power_Reave,
		SFXVocalizationEvent_Power_ShockWave,
		SFXVocalizationEvent_Power_Crush,
		SFXVocalizationEvent_Power_CombatDrone,
		SFXVocalizationEvent_Power_Incinerate,
		SFXVocalizationEvent_Power_Lift,
		SFXVocalizationEvent_Power_Pull,
		SFXVocalizationEvent_Power_Singularity,
		SFXVocalizationEvent_Power_Stasis,
		SFXVocalizationEvent_Power_Throw,
		SFXVocalizationEvent_Power_Warp,
		SFXVocalizationEvent_Power_Biotic_Misc,
		SFXVocalizationEvent_Power_AIHack,
		SFXVocalizationEvent_Power_Fissure,
	};

	struct VocEventLog
	{
		Pawn* Speaker; //offset = 0, size = 4
		Pawn* ReferredTo; //offset = 4, size = 4
		Byte Id; //offset = 8, size = 1
		Float Time; //offset = 12, size = 4
	};

	class SFXVocalizationManager: public SFXVocalizationManagerNativeBase
	{
		DECLARE_PACKAGE_CLASS( SFXVocalizationManager, SFXVocalizationManagerNativeBase, SFXGame )

	public:

		Array<VocEventLog> PastEvents; //offset = 556, size = 12

		void DrawActorLog( Actor* oActor, BioHUD* H, Vector ScreenCoords, Float X, Float Y, Float YL, Vector CamLoc, Rotator CamRot, Int idx );
		void DebugDraw( BioHUD* H, Array<Actor*> Done, Actor* A, Int idx );
		void TickEvents( Float DeltaTime, Int idx, Int SoundsThisFrame, Bool bPlayedVocEvent, Bool bHandledVocEvent, VocEventLog vlog, SFXVocalizationEvent CurrentEvent );
		Bool PlaySFXVocalizationSLineInternal( SFXVocalizationEvent E, SFXVocalizationLine LineToPlay, BioPawn* Speaker, Float DelaySec, VocEventLog vlog );
		void TriggerVocalizationEvent( Byte Id, BioPawn* InInstigator, BioPawn* Recipient, BioPawn* ReferringTo, Float DelaySec, Float fChanceToPlayModifier, SFXVocalizationEventProperties EventProps, SFXVocalizationEvent NewEvent, BioWorldInfo* TheWorldInfo, BioPlayerController* PC );
		void PostBeginPlay();
	};

	struct DamagePart
	{
		Float Damage; //offset = 0, size = 4
		Bool bIsDetached: 1; //offset = 4, size = 4
	};

	class SFXModule_Damage: public SFXModule_DamageBase
	{
		DECLARE_PACKAGE_CLASS( SFXModule_Damage, SFXModule_DamageBase, SFXGame )

	public:

		DamagePart DamageParts[8]; //offset = 68, size = 8
		Float CurrentHealth; //offset = 132, size = 4
		ScaledFloat MaxHealth; //offset = 136, size = 36
		Bool bShowImmunityOnGUI: 1; //offset = 172, size = 4
		Bool bGoreActorEnabled: 1; //offset = 172, size = 4
		Bool bPartBasedDamageEnabled: 1; //offset = 172, size = 4
		Bool bIsDead: 1; //offset = 172, size = 4
		Float DamageScale; //offset = 176, size = 4
		WwiseRTPCForActorHandler m_RTPCHandler; //offset = 180, size = 20
		Float m_fLastHealthPct; //offset = 200, size = 4
		Float NOTICEABLE_RTPC_CHANGE_AMOUNT; //offset = 204, size = 4
		ScaledFloat DamageMultiplier; //offset = 208, size = 36

		void Tick( Float TimeDelta, Float fHealthPct, Float fPctChange );
		void DestroyConstraint( Byte Group, RB_BodySetup* Body );
		Array<Byte> GetConstraints(, Array<Byte> output, RB_BodySetup* Body );
		void PlayHitEffects( TraceHitInfo HitInfo, Vector HitLocation, Actor* DamageCauser, SFXWeapon* Weapon, ImpactInfo Impact );
		RB_BodySetup* GetBodyFromHit( TraceHitInfo HitInfo, Pawn* OwnerPawn, RB_BodySetup* Body, Int BoneIdx, Int ParentIdx );
		void SFXTakeRadiusDamage( Float Damage, Float DamageRadius, Bool bFullDamage, Vector HurtOrigin, Float Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser, Float ColRadius, Float ColHeight, Float Dist, Float Scale, Vector Dir, Bool bConstantFalloff );
		void ProcessHit( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser, Bool HeadShot, Pawn* PawnOwner, Controller* Killer );
		void DetachLimb( RB_BodySetup* HitBody, SFXPawn* Pawn, ParticleSystemComponent* PSC, ParticleSystem* Template, MaterialInstanceConstant* MIC );
		void CreateGoreActor( Pawn* Pawn, Name BoneName, SFXGoreActor* PhysActor, Vector Offset );
		void ApplyDamageToHealth( Float Damage, Controller* InstigatedBy, Class* DamageType, Vector HitLocation );
		void SFXTakeDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser, SFXGame* Game, RB_BodySetup* HitBody, Float HealthRatio, Class* DamageClass, Float Shields, Float Health, Float OriginalDamage, Float CurrentShields, Float ActualShieldDamage, Float ActualHealthDamage, SFXShield_Base* ShieldObj, Bool bWasDead, SFXPRI* PRI, SFXPRI* InstigatorPRI, Bool bGenHeadShotVoc );
		void PostBeginPlay();
		void ScaleHealth();
	};

	class SFXModule_DamageParty: public SFXModule_Damage
	{
		DECLARE_PACKAGE_CLASS( SFXModule_DamageParty, SFXModule_Damage, SFXGame )

	public:

		Bool bHealthRegenerates: 1; //offset = 244, size = 4
		Float HealthRegenRate; //offset = 248, size = 4
		Float HealthRegenTimeout; //offset = 252, size = 4
		Float TimeLastHurt; //offset = 256, size = 4

		void ApplyDamageToHealth( Float Damage, Controller* InstigatedBy, Class* DamageType, Vector HitLocation );
		void Regen( Float DeltaTime, SFXShield_Base* Shield, SFXInventoryManager* InvManager );
		void Tick( Float DeltaTime );
	};

	class SFXModule_DamagePlayer: public SFXModule_DamageParty
	{
		DECLARE_PACKAGE_CLASS( SFXModule_DamagePlayer, SFXModule_DamageParty, SFXGame )

	public:

		Bool bIsBleedingOut: 1; //offset = 260, size = 4
		Float BleedOutSoundTime; //offset = 264, size = 4
		Float BleedOutSoundDuration; //offset = 268, size = 4
		BioVisualEffect* BleedOutVFX; //offset = 272, size = 4
		BioVisualEffect* DamageFrameBuffer; //offset = 276, size = 4
		Float BleedOutEntryThreshold; //offset = 280, size = 4
		Float BleedOutRecoveryThreshold; //offset = 284, size = 4
		Float BleedOutStartTime; //offset = 288, size = 4
		Float BleedOutSoundDurationStart; //offset = 292, size = 4
		Float BleedOutSoundDurationEnd; //offset = 296, size = 4
		Float BleedOutSoundVolumeStart; //offset = 300, size = 4
		Float BleedOutSoundVolumeEnd; //offset = 304, size = 4
		WwiseAudioComponent* WwiseComponent; //offset = 308, size = 4
		WwiseEventPairObject* BleedOutEventPair; //offset = 312, size = 4
		String BleedOutRTPC; //offset = 316, size = 12
		BioVFXTemplate* BleedOutVFXTemplate; //offset = 328, size = 4
		Name BleedOutVFXParameter; //offset = 332, size = 8
		Float fBleedOutInterpolatedValue; //offset = 340, size = 4
		Float fDebugShieldIndicator; //offset = 344, size = 4
		Float fDebugHealthIndicator; //offset = 348, size = 4
		Float fDebugCooldownIndicator; //offset = 352, size = 4
		Bool bDebugHealthBarEnabled: 1; //offset = 356, size = 4

		Float ComputePercentBledOut();
		void OnBleedOutStop();
		void OnBleedOutStart();
		void ScaleBleedOut( Float PercentBledOut );
		void UpdateBleedOut( Float TimeDelta, Float PercentBledOut, Bool bIsBleedingOutNow );
		Float CalculateBleedoutVFXParam();
		void Tick( Float TimeDelta, Float fShields, Float fHealth, Float fCooldown, SFXPower* oPower );
		void RecoverFromBleedout();
		void ApplyDamageToHealth( Float Damage, Controller* InstigatedBy, Class* DamageType, Vector HitLocation, SFXGameEffect* Effect, Float fEstimatedDamage, Bool bGetDamageProtection );
		void SFXTakeDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser, Class* DamageClass, MassEffectGuiManager* oSFManager );
	};

	struct STech
	{
		Name nmTech; //offset = 0, size = 8
		Name nmResearch; //offset = 8, size = 8
		String sImage; //offset = 16, size = 12
		String sLargeImage; //offset = 28, size = 12
		srTitle srTitle; //offset = 40, size = 4
		srName srName; //offset = 44, size = 4
		srMessage srMessage; //offset = 48, size = 4
		srDescription srDescription; //offset = 52, size = 4
		Int nLevels; //offset = 56, size = 4
		Int UnlockId; //offset = 60, size = 4
	};

	struct STreasure
	{
		Int nTreasureId; //offset = 0, size = 4
		Name nmLevel; //offset = 4, size = 8
		Name nmTreasure; //offset = 12, size = 8
		Name nmTech; //offset = 20, size = 8
		Byte Resource; //offset = 28, size = 1
		Int ResourcePrice; //offset = 32, size = 4
		Name nmRequiredTech; //offset = 36, size = 8
		Int RequiredTechLevel; //offset = 44, size = 4
		Int DiscoverTechLevel; //offset = 48, size = 4
		Bool bNoAnimation: 1; //offset = 52, size = 4
		Bool bMultiLevel: 1; //offset = 52, size = 4
	};

	struct SResourceBudget
	{
		Name nmLevel; //offset = 0, size = 8
		Int nCredits; //offset = 8, size = 4
		Int nEezo; //offset = 12, size = 4
		Int nIridium; //offset = 16, size = 4
		Int nPlatinum; //offset = 20, size = 4
		Int nPalladium; //offset = 24, size = 4
		Int nID; //offset = 28, size = 4
	};

	class SFXPlotTreasure: public BioPlotTreasure
	{
		DECLARE_PACKAGE_CLASS( SFXPlotTreasure, BioPlotTreasure, SFXGame )

	public:

		Float fFullPriceMultiplier; //offset = 72, size = 4
		Int nLastUnlockedTech; //offset = 76, size = 4
		srMultiLevelUpgradeName srMultiLevelUpgradeName; //offset = 80, size = 4
		Int nProfessorInPartyId; //offset = 84, size = 4
		Int nProfessorIsDeadId; //offset = 88, size = 4
		srLabOpenResearchMessage srLabOpenResearchMessage; //offset = 92, size = 4
		srLabClosedResearchMessage srLabClosedResearchMessage; //offset = 96, size = 4
		Int StateNewResearchAvailable; //offset = 100, size = 4
		Int StateNewUpgradesAvailable; //offset = 104, size = 4
		Int srCanAffordResearch; //offset = 108, size = 4

		void TriggerResourceHint( Byte InvType, Int nAmount, Name nmTmp, Int I, Int nCurrentAmount, Int nNewAmount, Int nTmp, BioPlayerController* oController, SFXInventoryManager* oInventory, MassEffectGuiManager* oGuiMan, STech stTech );
		void SetNewUpgradesAvailable( Bool bUpgadesAvailable );
		void SetNewResearchAvailable( Bool bResearchAvailable );
		Texture2D* FindImage( String Path, Texture2D* Image );
		void GetTechImageResourcePath( Name nmTech, String sImagePath, String sLargeImagePath, Bool bNoLookup, Int I, Name nmTmp );
		String GetTreasureLargeImageResourcePath( Int nTreasureId, Int I, Int J, Name nmTech, String sImagePath, String sLargeImagePath );
		String GetTreasureImageResourcePath( Int nTreasureId, Int I, Int J, Name nmTech, String sImagePath, String sLargeImagePath );
		Float Price( Int nTreasureId, Bool bDiscount, STreasure stTreasure, BioPlayerController* PC, SFXModule_GameEffectManager* Manager, Float EngineerReduction, Int nPrice, Int nLevel, Float fProfessorIsDeadPenalty );
		Int CalculateResearchLevelMultiplier( Name nmTech, Int I, Int nLevel, BioGlobalVariableTable* oGV, Name nmTreasureTech, Name nmTreasureResource );
		Bool ChargeForTreasure( Int nTreasureId, Bool bDiscount, STreasure stTreasure, SFXInventoryManager* oInv );
		Bool QualifiesForTreasure( Int nTreasureId, STreasure stTreasure, STech stTech, Int nRequiredTechLevel, BioGlobalVariableTable* oGV );
		Bool DiscoveredResearch( Int nTreasureId, STreasure stTreasure );
		Bool CanAffordTreasure( Int nTreasureId, Bool bDiscount, STreasure stTreasure, SFXInventoryManager* oInv, Bool bCanAfford, Int RealPrice, Int RealCredits );
		String GetTechName( STech stTech, Bool bAddOne, String sName, Int nLevel, Int nMaxLevel );
		void CheckForUpgradedWeaponAchievement( GrinderAchievement G, BioPlayerController* oController, Int ARpoints, Int APpoints, Int SGpoints, Int SRpoints, Int HPpoints, Int Points, Int gPoints, BioGlobalVariableTable* oGV, Int idx );
		void ReLockTech( STech stTech );
		Bool AwardTech( Name nmTech, Bool bNoAnimation, Bool bStorePurchase, Int nLevel, Int nResearchLevel, String sMapName, Texture2D* oImage, Bool bFoundResearch, Bool bLabOpen, Bool bFoundWeapon, String sName, String sMessage, STech stTech, BioGlobalVariableTable* oGV, BioPlayerController* oController );
		Name FindTechByResearch( Name nmTech, Name nmRequiredTech, Int I );
		Bool AwardTreasure( Int nTreasureId, Bool bDiscount, STreasure stTreasure, Bool bResult, BioRemoteLogger* GLogger, String sMapName, Pawn* PlayerPawn, Bool bStorePurchase );
		void LogWarning( String msg );
		Name CurrentLevel(, String sMapName );
		STech tech( Name nmTech, STech stTech, Int N, Name nmTmp );
		STreasure TREASURE( Int nTreasureId, STreasure stTreasure, Name nmTreasureValue, Name nmResource, Int ResourcePrice, Name nmRequiredTech, Int RequiredTechLevel, Int DiscoverTechLevel, Int nNoAnimation, Int nMultiLevel );
		SResourceBudget Budget( Name nmLevel, SResourceBudget stBudget, Int nBudgetValue );
		SResourceBudget BudgetFromId( Int nID, SResourceBudget stResource, Name nmLevel, Int I, Int nCredits, Int Eezo, Int Palladium, Int Platinum, Int Iridium, Int Id );
	};

	const char* IsFemale = 66;
	const char* ME1_Plots_for_ME2_UNC_Hostile_Takeover_Blake_Persuaded = 373;
	const char* ME1_Plots_for_ME2_UNC_Hostile_Takeover_Blake_Agreed = 373;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP120_Survivors_Revenge_Quest_Complete_Killed_Scientist = 535;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP120_Survivors_Revenge_Quest_Complete_Convinced_Soldier = 535;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP120_Survivors_Revenge_Quest_Complete = 535;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP111_Hostage_Situation_Situation_Resolved_Killed_Biotics = 537;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP111_Hostage_Situation_Situation_Resolved_Biotics_surrendered = 538;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP111_Hostage_Situation_Situation_Resolved = 537;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP111_Hostage_Situation_chairman_died = 537;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP108_SlaveQueen_Player_Met_Nassana = 126;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_SP108_SlaveQueen_Player_Killed_Sister = 125;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_Contracts_and_Licenses_Got_Elkoss_Combine = 377;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_Cerberus_Plots_Heard_of_Cerberus = 236;
	const char* ME1_Plots_for_ME2_Light_Content_Subplots_Cerberus_Plots_Fought_Cerberus = 236;
	const char* ME1_Plots_for_ME2_Global_Player_Played_ME = 227;
	const char* ME1_Plots_for_ME2_DLC_UNC_UNC52_Plot_Finished_Humans_Rescued = 536;
	const char* ME1_Plots_for_ME2_DLC_UNC_UNC52_Plot_Finished = 536;
	const char* ME1_Plots_for_ME2_CH4_Star_Citadel_Udina_Chosen = 155;
	const char* ME1_Plots_for_ME2_CH4_Star_Citadel_Council_Dead = 155;
	const char* ME1_Plots_for_ME2_CH4_Star_Citadel_Council_Alive = 155;
	const char* ME1_Plots_for_ME2_CH4_Star_Citadel_Anderson_chosen = 155;
	const char* ME1_Plots_for_ME2_CH2_Virmire_Incursion_40_GethFlyers_Disabled = 537;
	const char* ME1_Plots_for_ME2_CH2_Virmire_Wrex_Died = 375;
	const char* ME1_Plots_for_ME2_CH2_Virmire_PC_Killed_Thanoptis = 227;
	const char* ME1_Plots_for_ME2_CH2_Virmire_Kirrahe_Survived = 339;
	const char* ME1_Plots_for_ME2_CH2_Virmire_Kaidan_died = 154;
	const char* ME1_Plots_for_ME2_CH2_Virmire_Ash_Killed_Wrex = 186;
	const char* ME1_Plots_for_ME2_CH2_Virmire_Ash_died = 154;
	const char* ME1_Plots_for_ME2_CH2_Noveria_Rachni_Rachni_Alive = 315;
	const char* ME1_Plots_for_ME2_CH2_Noveria_Port_Hanshen_Got_Lorik_to_Testify = 314;
	const char* ME1_Plots_for_ME2_CH2_Noveria_Port_Hanshen_Gianna_Alive = 315;
	const char* ME1_Plots_for_ME2_CH2_Noveria_Leaving_Hanshan_Port_Kickbacks_Kickbacks_Complete_Evidence_to_Lorik = 537;
	const char* ME1_Plots_for_ME2_CH2_Noveria_Leaving_Hanshan_Port_Kickbacks_Kickbacks_Complete_Evidence_to_Gianna = 537;
	const char* ME1_Plots_for_ME2_CH2_Noveria_Leaving_Hanshan_Port_Kickbacks_Kickbacks_Complete = 537;
	const char* ME1_Plots_for_ME2_CH2_Noveria_ICE_60_Conversation_Flags_Han_Olar_Talked_Once = 538;
	const char* ME1_Plots_for_ME2_CH2_Feros_Frontier_Lost_Colony_Outcome_Renegade = 536;
	const char* ME1_Plots_for_ME2_CH2_Feros_Frontier_Lost_Colony_Outcome_Give_Good_Plus = 536;
	const char* ME1_Plots_for_ME2_CH2_Feros_Frontier_Lost_Colony_Outcome_Give_Good = 536;
	const char* ME1_Plots_for_ME2_CH2_Feros_Frontier_Lost_Colony_Outcome_Give_Failed = 536;
	const char* ME1_Plots_for_ME2_CH2_Feros_Frontier_Lost_Colony_Outcome = 536;
	const char* ME1_Plots_for_ME2_CH2_Feros_Shiala_Lived = 319;
	const char* ME1_Plots_for_ME2_CH2_Feros_Colony_Survived = 304;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_The_Fan_Knew_Conrad_Unfinished = 314;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_The_Fan_Knew_Conrad_Intimidated = 314;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_The_Fan_Knew_Conrad_Got_him_killed = 314;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_The_Fan_Knew_Conrad_Charmed = 314;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_The_Fan_Knew_Conrad = 314;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP113_Memories_of_Green_Plot_Complete_Killed_Finch = 535;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP113_Memories_of_Green_Plot_Complete = 535;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP113_Memories_of_Green_Met_Finch = 535;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP112_I_Remember_Me_Resolved_Talked_Her_Down = 534;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP112_I_Remember_Me_Resolved_Bait_and_Switch = 534;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP112_I_Remember_Me_Resolved = 534;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP111_Drink_Before_the_War_Spoke_to_Mom = 535;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP110_In_Flanders_Fields_Quest_Complete_Got_Body = 536;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP110_In_Flanders_Fields_Quest_Complete = 536;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP105a_Expose_Quest_Completed_Gave_Info = 537;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Roleplaying_Plots_RP105a_Expose_Quest_Completed = 537;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Keeper_Secret_Scan_the_Keepers_NumKeepersScanned = 54;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Keeper_Secret_Scan_the_Keepers_Accepted_Quest_Chorbin_Gave_Quest = 538;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Keeper_Secret_Scan_the_Keepers_Accepted_Quest = 538;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Keeper_Secret_Chorban_dealt_with_Scared_Off = 538;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Keeper_Secret_Chorban_dealt_with_Killed = 538;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Keeper_Secret_Chorban_dealt_with = 538;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Fist_Fist_Left_Alive = 373;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_FIRST_TIME_TALKED_TO_Harkin = 521;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Doctor_Michel_Black_Mailer_Dealt_With_Persuaded = 538;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Doctor_Michel_Black_Mailer_Dealt_With_Killed = 538;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Doctor_Michel_Black_Mailer_Dealt_With = 538;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Consort_Plot_Got_and_Used_Token = 215;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Biased_Reporter_Walked_Away = 375;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Biased_Reporter_Shepard_Looked_Good = 371;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Biased_Reporter_Shepard_Looked_Bad = 371;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Biased_Reporter_Punched_Her = 371;
	const char* ME1_Plots_for_ME2_CH1_Star_Citadel_Asari_Companion_Plot_Complete = 537;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Tali_pilgrimmage_completed = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Reputation_War_hero = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Reputation_sole_survivor = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Reputation_Ruthless = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Reputation = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_NoRomance_True = 192;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Liara_romance_true = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Kaidan_romance_true = 152;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Garrus_Joined_Squad = 240;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Garrus_Influence_Pushed_to_Spectres = 392;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Garrus_Influence_Pushed_back_to_CSec = 392;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Garrus_Influence = 392;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Background_Spacer = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Background_Earthborn = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Background_Colonist = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Background = 153;
	const char* ME1_Plots_for_ME2_Background_and_Relationships_Ashley_Romance_True = 152;
	const char* ME1_Plots_for_ME2_Utility_Henchman_InParty_Wrex = 375;
	const char* ME1_Plots_for_ME2_Utility_Henchman_InParty_Turian = 265;
	const char* ME2_Plots_Utility_Player_Info_Current_Music = 9;
	const char* ME2_Plots_Utility_Player_Info_Plot_Added_Max_Medigel = 11;
	const char* ME2_Plots_Utility_Player_Info_Playthrough_Complete = 76;
	const char* ME2_Plots_Utility_Player_Info_Renegade = 3;
	const char* ME2_Plots_Utility_Player_Info_Paragon = 2;
	const char* ME2_Plots_Utility_Player_Info_Character_Class = 23;
	const char* ME2_Plots_Utility_Player_Info_Reputation = 8;
	const char* ME2_Plots_Utility_Player_Info_Childhood = 7;
	const char* ME2_Plots_Utility_Player_Info_Female_Player = 66;
	const char* MaxEnemyLevel = 10;

	struct TreasureBudget
	{
		Int LevelId; //offset = 0, size = 4
		Int Credits; //offset = 4, size = 4
		Int Eezo; //offset = 8, size = 4
		Int Palladium; //offset = 12, size = 4
		Int Platinum; //offset = 16, size = 4
		Int Iridium; //offset = 20, size = 4
	};

	class SFXGameConfig: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXGameConfig, Object, SFXGame )

	public:

		Float PhysicsMomentumMultiplier; //offset = 60, size = 4
		Float PlayerMomentumCap; //offset = 64, size = 4
		Float PlayerCoverDamageMultiplier; //offset = 68, size = 4
		Float PlayerStormDamageMultiplier; //offset = 72, size = 4
		Float PlayerCoverLeanDamageMultiplier; //offset = 76, size = 4
		Float PawnInRagdollDamageMultiplier; //offset = 80, size = 4
		Float PlayerCoverRegenTimerMultiplier; //offset = 84, size = 4
		Bool WeaponsUseHeat: 1; //offset = 88, size = 4
		Bool bOutOfAmmoWeaponSwap: 1; //offset = 88, size = 4
		Bool bShieldsBlockPowers: 1; //offset = 88, size = 4
		Bool UseSharedPowerCooldown: 1; //offset = 88, size = 4
		Bool bUseConsoleControls: 1; //offset = 88, size = 4
		Bool bShowScore: 1; //offset = 88, size = 4
		Bool bReviveSquadOnUse: 1; //offset = 88, size = 4
		Bool bBudgetEnforced: 1; //offset = 88, size = 4
		Bool bAimAssistEnabled: 1; //offset = 88, size = 4
		Bool bLastDamageUpdate: 1; //offset = 88, size = 4
		Float HeatDissipationRate; //offset = 92, size = 4
		Float CoverAimBonus; //offset = 96, size = 4
		Int MaxPlayerLevel; //offset = 100, size = 4
		Int MaxPlayerExperience; //offset = 104, size = 4
		Texture2D* SelectionReticle; //offset = 108, size = 4
		MaterialInterface* SelectionMaterial; //offset = 112, size = 4
		Bool bIsFullAmmo: 1; //offset = 116, size = 4
		Int CreditsGlobal; //offset = 120, size = 4
		Int IridiumGlobal; //offset = 124, size = 4
		Int PlatinumGlobal; //offset = 128, size = 4
		Int PalladiumGlobal; //offset = 132, size = 4
		Int EezoGlobal; //offset = 136, size = 4
		Int IdGlobal; //offset = 140, size = 4
		Int CreditsLocal; //offset = 144, size = 4
		Int EezoLocal; //offset = 148, size = 4
		Int IridiumLocal; //offset = 152, size = 4
		Int PalladiumLocal; //offset = 156, size = 4
		Int PlatinumLocal; //offset = 160, size = 4
		Int IdLocal; //offset = 164, size = 4
		Int nLastDamage; //offset = 168, size = 4
		Float fLastDamageUpdate; //offset = 172, size = 4
		Float fAmmoPulseTimer; //offset = 176, size = 4
		Float fTmpShieldIndicator; //offset = 180, size = 4
		Float fTmpHealthIndicator; //offset = 184, size = 4
		Float fHealthInterpSpeed; //offset = 188, size = 4

		Int RecordTreasure( Byte eType, Int Award, Int LevelId, SResourceBudget Budget, SFXPlotTreasure* oTreasure, BioGlobalVariableTable* oGV, TreasureBudget stLevelBudget, TreasureBudget stGlobalBudget );
		TreasureBudget GetGlobalBudget(, TreasureBudget stTreasureBudget, BioGlobalVariableTable* oGV );
		TreasureBudget GetLevelBudget(, TreasureBudget stTreasureBudget, BioGlobalVariableTable* oGV );
	};

	struct ScoreEvent
	{
		String Text; //offset = 0, size = 12
		Float ExpiryTime; //offset = 12, size = 4
	};

	struct DamageRecordStruct
	{
		Controller* DamageCauser; //offset = 0, size = 4
		Float DamageDone; //offset = 4, size = 4
	};

	struct KillScore
	{
		Name DamageClassName; //offset = 0, size = 8
		String Message; //offset = 8, size = 12
		Int Points; //offset = 20, size = 4
		Byte GrinderAchievementId; //offset = 24, size = 1
	};

	struct DamageCalculationAlgorithm
	{
		Float BaseDamage; //offset = 0, size = 4
		Float RangeMultiplier; //offset = 4, size = 4
		Float PassiveGEMultiplier; //offset = 8, size = 4
		Float GEMultiplier; //offset = 12, size = 4
		Float StealthMultiplier; //offset = 16, size = 4
		Float LastBulletMultiplier; //offset = 20, size = 4
		Float DifficultyMultiplier; //offset = 24, size = 4
		Float PartBasedDamageMultiplier; //offset = 28, size = 4
		Float DamageScale; //offset = 32, size = 4
		Float CoverLeanMultiplier; //offset = 36, size = 4
		Float CoverMultiplier; //offset = 40, size = 4
		Float StormMultiplier; //offset = 44, size = 4
		Float RagdollMultiplier; //offset = 48, size = 4
		Float AchievementBonusDamage; //offset = 52, size = 4
	};

	class SFXPRI: public SFXPRI_NativeBase
	{
		DECLARE_PACKAGE_CLASS( SFXPRI, SFXPRI_NativeBase, SFXGame )

	public:

		Float Multiplier; //offset = 676, size = 4
		Float PointsFor_DamageDealt; //offset = 680, size = 4
		Float PointsFor_DamageReceived; //offset = 684, size = 4
		Float PointsFor_HeadShot; //offset = 688, size = 4
		Float PointsFor_Kill_Minion; //offset = 692, size = 4
		Float PointsFor_Kill_Elite; //offset = 696, size = 4
		Float PointsFor_Kill_SubBoss; //offset = 700, size = 4
		Float PointsFor_Kill_Boss; //offset = 704, size = 4
		DamageCalculationAlgorithm LastDamageCalculation; //offset = 708, size = 56
		Array<KillScore> PointsFor_SpecialKills; //offset = 764, size = 12
		Array<KillScore> PointsFor_GameEffectKills; //offset = 776, size = 12
		Float PointsFor_FlamethrowerTankKill; //offset = 788, size = 4
		Array<DamageRecordStruct> DamageRecord; //offset = 792, size = 12
		Int ShotsFired; //offset = 804, size = 4
		Int ShotsHit; //offset = 808, size = 4
		Float RawDamage; //offset = 812, size = 4
		Float NetDamage; //offset = 816, size = 4
		Int HeadShots; //offset = 820, size = 4
		Actor* CurrentTarget; //offset = 824, size = 4
		Int ShotsFiredCurrentTarget; //offset = 828, size = 4
		Int ShotsHitCurrentTarget; //offset = 832, size = 4
		Float RawDamageCurrentTarget; //offset = 836, size = 4
		Float NetDamageCurrentTarget; //offset = 840, size = 4
		Float DamageTakenRaw; //offset = 844, size = 4
		Float DamageTakenNet; //offset = 848, size = 4
		Float TimeInCombat; //offset = 852, size = 4
		Float TimeLastCombat; //offset = 856, size = 4
		Float LastCombatTimestamp; //offset = 860, size = 4
		Float DifficultyScore; //offset = 864, size = 4
		Float LockedScore; //offset = 868, size = 4
		Float ChallengeModifier; //offset = 872, size = 4
		Bool bCalculatedChallenge: 1; //offset = 876, size = 4
		Float CurrentHealthMultiplier; //offset = 880, size = 4
		Float CurrentShieldModifier; //offset = 884, size = 4
		Float CurrentMaxAttackTickets; //offset = 888, size = 4
		Float CurrentMaxAttackTicketsHench; //offset = 892, size = 4
		Float CurrentMaxTargetTickets; //offset = 896, size = 4
		Float CurrentMaxTargetTicketsHench; //offset = 900, size = 4
		Float RecoilBonus; //offset = 904, size = 4
		Float WeaponPassiveDamageBonus; //offset = 908, size = 4
		Float WeaponDamageBonus; //offset = 912, size = 4
		Array<ScoreEvent> ScoreLog; //offset = 916, size = 12

		void DivyPoints( Controller* Other, SFXPRI* KilledPRI, SFXPRI* KillerPRI, DamageRecordStruct DRS, Float PointsForDamage, Float TotalDamageRecorded, Float DamageNormalizer );
		void ResetDamageDealt();
		void ScoreFinesseKill( BioPawn* Other, Class* DamageType, KillScore KS, SFXGameEffect* GE );
		void AddGrinderAchievement( Byte AchievementId, BioPawn* oTarget );
		void AddScore( Int Points, String Message, Bool bAddDifficultyScore, ScoreEvent SE );
		void LockScore( Float fScore );
		void DrawScore( HUD* HUD, Int idx, Int OldX, Int OldY, Font* OldFont );
		void RecordDamageDone( Controller* DamageCauser, Float Amount, Int idx, DamageRecordStruct DRS );
		void SwitchTarget( Actor* Target );
		void Clear();
		SFXPRI* FindLocalPRI(, GameReplicationInfo* GRI, PlayerReplicationInfo* PRI );
		void PostBeginPlay();
		void Tick( Float DeltaTime, Int idx );
		void UpdateScoreDifficulty();
	};

	class SFXDifficulty: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXDifficulty, Object, SFXGame )

	public:

		Vector2D PlayerHealthMultiplierLow; //offset = 60, size = 8
		Vector2D PlayerHealthMultiplierHigh; //offset = 68, size = 8
		Vector2D HenchHealthMultiplierLow; //offset = 76, size = 8
		Vector2D HenchHealthMultiplierHigh; //offset = 84, size = 8
		Vector2D EnemyHealthMultiplierLow; //offset = 92, size = 8
		Vector2D EnemyHealthMultiplierHigh; //offset = 100, size = 8
		Vector2D FriendlyHealthMultiplierLow; //offset = 108, size = 8
		Vector2D FriendlyHealthMultiplierHigh; //offset = 116, size = 8
		Float EnemyShieldBonus; //offset = 124, size = 4
		Float EnemyAimMultiplier; //offset = 128, size = 4
		Float AmmoDecayMultiplier; //offset = 132, size = 4
		Float BleedOutInterval; //offset = 136, size = 4
		Float BreachDuration; //offset = 140, size = 4
		Int DifficultyLevel; //offset = 144, size = 4
		Float MinScore; //offset = 148, size = 4
		Float MaxScore; //offset = 152, size = 4
		Float PlayerShieldRechargeModifier; //offset = 156, size = 4
		Int MaxAttackTickets; //offset = 160, size = 4
		Int MaxAttackTicketsHench; //offset = 164, size = 4
		Int MaxTargetTickets; //offset = 168, size = 4
		Int MaxTargetTicketsHench; //offset = 172, size = 4
		Float EnemyPowerCooldownMultiplier; //offset = 176, size = 4
		Float SquadPowerDurationMultiplier; //offset = 180, size = 4
		Float SquadPowerCooldownMultiplier; //offset = 184, size = 4

		void UpdateDifficulty( SFXPRI* PRI, Float Score, SFXPRI* PlayerPRI, Pawn* PlayerPawn, Pawn* Pawn );
		Float GetPlayerDifficultyScore(, SFXPRI* PlayerPRI );
		Float GetDurationMultiplier( Actor* Owner );
		Float GetCooldownMultiplier( Actor* Owner );
	};

	const char* MAXSHIELDBARS = 6;
	const char* MINSHIELDBARS = 0;

	enum ResistanceType
	{
		ResistanceType_Shield,
		ResistanceType_Armour,
	};


	class SFXShield_Base: public Inventory
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Base, Inventory, SFXGame )

	public:
		struct Active
		{
			/*
			BeginState
			*/
		};

		Bool bShowBarrierOnGUI: 1; //offset = 584, size = 4
		Bool bRechargeable: 1; //offset = 584, size = 4
		Bool bHardened: 1; //offset = 584, size = 4
		Bool bFastCoverRegen: 1; //offset = 584, size = 4
		Bool bAbsorbDamageOnBreak: 1; //offset = 584, size = 4
		ShieldDisplayName ShieldDisplayName; //offset = 588, size = 4
		ParticleSystem* PS_Impact; //offset = 592, size = 4
		ParticleSystem* PS_Recharged; //offset = 596, size = 4
		ParticleSystem* PS_Breach; //offset = 600, size = 4
		ParticleSystem* PS_CriticalHit; //offset = 604, size = 4
		ParticleSystem* PS_Explode; //offset = 608, size = 4
		Float ShieldScale; //offset = 612, size = 4
		Vector ShieldOffset; //offset = 616, size = 12
		PhysicalMaterial* PhysMat; //offset = 628, size = 4
		WwiseEventPairObject* ShieldsDownSound; //offset = 632, size = 4
		Float ShieldRegenTimer; //offset = 636, size = 4
		Float CurrentShields; //offset = 640, size = 4
		ScaledFloat MaxShields; //offset = 644, size = 36
		ScaledFloat ShieldRegenDelay; //offset = 680, size = 36
		Vector2D ShieldRechargeTime; //offset = 716, size = 8
		Float PartialBreakPct; //offset = 724, size = 4
		Float BoostedShieldMax; //offset = 728, size = 4
		Float ShieldPointsPerBar; //offset = 732, size = 4
		Vector2D PenetrationDefault; //offset = 736, size = 8
		Vector2D PenetrationVeryLight; //offset = 744, size = 8
		Vector2D PenetrationLight; //offset = 752, size = 8
		Vector2D PenetrationMedium; //offset = 760, size = 8
		Vector2D PenetrationHeavy; //offset = 768, size = 8
		Float HardenedDamageMultiplier; //offset = 776, size = 4
		Byte Resistance; //offset = 780, size = 1
		__ShieldDestroyedPowerCallback__Delegate __ShieldDestroyedPowerCallback__Delegate; //offset = 784, size = 12

		void ItemRemovedFromInvManager( BioPawn* BP );
		void GivenTo( Pawn* thisPawn, Bool bDoNotActivate, BioPawn* BP );
		Int GetShieldBars();
		Float GetImpactScale( SFXWeapon* Weapon, Vector HitLocation, Float Range, Float Scale );
		void PlayShieldSound( SFXWeapon* Weapon, TraceHitInfo HitInfo, Vector HitLocation, WwiseEvent* ShieldSound );
		void ActivateWeaponImpact( SFXWeapon* Weapon, TraceHitInfo HitInfo, Vector HitLocation, ParticleSystem* Template, SkeletalMeshComponent* SMC, SFXObjectPool* Pool, ParticleSystemComponent* PSC, Vector HitNormal );
		void ActivatePSC( ParticleSystem* Template, Float ImpactScale, Vector Offset, SFXObjectPool* Pool, ParticleSystemComponent* PSC );
		Float GetDamageResistance( Class* DamageType, Float fResistance, SFXModule_GameEffectManager* GEModule, Float DamageReduction );
		void ApplyDamageToShields( Float Damage, Class* DamageType, Vector Momentum, Vector HitLocation, TraceHitInfo HitInfo, Controller* InstigatedBy, Float ShieldDamage, Float DamageResistance, BioPawn* Pawn, Float RandomNumber, Float ShieldBreakValue, Vector CriticalHitLocation, SFXGameEffect* Effect );
		void ApplyDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser, SFXWeapon* Weapon, Float ResearchDamageBonus );
		void Tick( Float DeltaSeconds, Float ShieldMax, BioPawn* Pawn, Float RechargeTime );
		Float GetShieldRechargeTime(, Float Mod );
		Float GetShieldRegenDelay();
		void ScaleShields();
		void ShieldDestroyedPowerCallback( Actor* ShieldActor, SFXShield_Base* Shield );
	};

	const char* MAXARMORLEVEL = 100;

	class SFXArmor_Base: public Inventory
	{
		DECLARE_PACKAGE_CLASS( SFXArmor_Base, Inventory, SFXGame )

	public:

		Bool bShowFortifyOnGUI: 1; //offset = 584, size = 4
		Float ArmorLevel; //offset = 588, size = 4
		Name ScalePlotId; //offset = 592, size = 8
		Vector2D DamageResistance; //offset = 600, size = 8
		Float FortifiedThreshold; //offset = 608, size = 4
		Vector2D PenetrationDefault; //offset = 612, size = 8
		Vector2D PenetrationVeryLight; //offset = 620, size = 8
		Vector2D PenetrationLight; //offset = 628, size = 8
		Vector2D PenetrationMedium; //offset = 636, size = 8
		Vector2D PenetrationHeavy; //offset = 644, size = 8

		void ApplyDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser );
		Float GetDamageResistance( Class* DamageType, Float Resistance, SFXModule_GameEffectManager* GEModule, Float DamageReduction );
		Float GetLevelRatio();
	};

	class SFXPlayerController: public BioPlayerController
	{
		DECLARE_PACKAGE_CLASS( SFXPlayerController, BioPlayerController, SFXGame )

	public:

		Byte CurrentCustomAction; //offset = 2204, size = 1

		void ServerBecomeActivePlayer( SFXGame* Game );
		void MantleCover( CovPosInfo CovInfo, BioPawn* BioPawn, BioCustomAction_CoverClimbMantleBase* CustomAction );
		void ClimbCover( CovPosInfo CovInfo, BioPawn* BioPawn, BioCustomAction_CoverClimbMantleBase* CustomAction );
		Bool TryClimbOrMantleCover(, CovPosInfo CoverInfo, BioPawn* oPawn );
		Bool GetCurrentCustomAction( BioCustomAction* pAction );
		void CustomActionEnded( Byte PrevAction );
		void CustomActionStarted( Byte NewAction, BioPawn* pBioPawn );
		Bool VerifyCAHasBeenInstanced( Byte CAction );
		Bool CanDoCustomAction( Byte CAction );
		void EndCustomAction();
		void DoCustomAction( Byte NewAction, BioPawn* MyPawn, BioActivePower* Active );
		Bool NotifyHitWall( Vector HitNormal, Actor* Wall, BioCustomAction* Action );
		Bool NotifyBump( Actor* Other, Vector HitNormal, BioCustomAction* Action, BioPawn* MyBP, SFXWeapon* Weapon, BioPower* MeleePower );
		void CheckNearMiss( Pawn* Shooter, Weapon* W, Vector WeapLoc, Vector LineDir, Vector HitLocation, SFXGame* GameInfo, BioPawn* ChkPawn, BioAiController* AI );
	};

	class SFXBonusList: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXBonusList, Object, SFXGame )

	public:

		Bool ExportIDsCached: 1; //offset = 60, size = 4
		Name RchAssaultRifleName; //offset = 64, size = 8
		Int RchAssaultRifleID; //offset = 72, size = 4
		Float RchAssaultRifleBonus; //offset = 76, size = 4
		Float RchAssaultRifleCache; //offset = 80, size = 4
		Name RchAutoPistolName; //offset = 84, size = 8
		Int RchAutoPistolID; //offset = 92, size = 4
		Float RchAutoPistolBonus; //offset = 96, size = 4
		Float RchAutoPistolCache; //offset = 100, size = 4
		Name RchBioDmgUpgradeName; //offset = 104, size = 8
		Int RchBioDmgUpgradeID; //offset = 112, size = 4
		Float RchBioDmgUpgradeBonus; //offset = 116, size = 4
		Float RchBioDmgUpgradeCache; //offset = 120, size = 4
		Name RchExploreScannerName; //offset = 124, size = 8
		Int RchExploreScannerID; //offset = 132, size = 4
		Float RchExploreScannerBonus; //offset = 136, size = 4
		Float RchExploreScannerCache; //offset = 140, size = 4
		Name RchGruntUpgradeName; //offset = 144, size = 8
		Int RchGruntUpgradeID; //offset = 152, size = 4
		Float RchGruntUpgradeBonus; //offset = 156, size = 4
		Float RchGruntUpgradeCache; //offset = 160, size = 4
		Name RchHWAmmoName; //offset = 164, size = 8
		Int RchHWAmmoID; //offset = 172, size = 4
		Float RchHWAmmoBonus; //offset = 176, size = 4
		Float RchHWAmmoCache; //offset = 180, size = 4
		Name RchHeavyPistolName; //offset = 184, size = 8
		Int RchHeavyPistolID; //offset = 192, size = 4
		Float RchHeavyPistolBonus; //offset = 196, size = 4
		Float RchHeavyPistolCache; //offset = 200, size = 4
		Name RchJackUpgradeName; //offset = 204, size = 8
		Int RchJackUpgradeID; //offset = 212, size = 4
		Float RchJackUpgradeBonus; //offset = 216, size = 4
		Float RchJackUpgradeCache; //offset = 220, size = 4
		Name RchLegionUpgradeName; //offset = 224, size = 8
		Int RchLegionUpgradeID; //offset = 232, size = 4
		Float RchLegionUpgradeBonus; //offset = 236, size = 4
		Float RchLegionUpgradeCache; //offset = 240, size = 4
		Name RchMedigelName; //offset = 244, size = 8
		Int RchMedigelID; //offset = 252, size = 4
		Int RchMedigelCache; //offset = 256, size = 4
		Name RchMiniGameDecryptName; //offset = 260, size = 8
		Int RchMiniGameDecryptID; //offset = 268, size = 4
		Float RchMiniGameDecryptBonus; //offset = 272, size = 4
		Float RchMiniGameDecryptCache; //offset = 276, size = 4
		Name RchMiniGameHackName; //offset = 280, size = 8
		Int RchMiniGameHackID; //offset = 288, size = 4
		Float RchMiniGameHackBonus; //offset = 292, size = 4
		Float RchMiniGameHackCache; //offset = 296, size = 4
		Name RchMordinUpgradeName; //offset = 300, size = 8
		Int RchMordinUpgradeID; //offset = 308, size = 4
		Float RchMordinUpgradeBonus; //offset = 312, size = 4
		Float RchMordinUpgradeCache; //offset = 316, size = 4
		Name RchQuarianShieldName; //offset = 320, size = 8
		Int RchQuarianShieldID; //offset = 328, size = 4
		Float RchQuarianShieldBonus; //offset = 332, size = 4
		Float RchQuarianShieldCache; //offset = 336, size = 4
		Name RchHealthUpgradeName; //offset = 340, size = 8
		Int RchHealthUpgradeID; //offset = 348, size = 4
		Float RchHealthUpgradeBonus; //offset = 352, size = 4
		Float RchHealthUpgradeCache; //offset = 356, size = 4
		Name RchShieldUpgradeName; //offset = 360, size = 8
		Int RchShieldUpgradeID; //offset = 368, size = 4
		Float RchShieldUpgradeBonus; //offset = 372, size = 4
		Float RchShieldUpgradeCache; //offset = 376, size = 4
		Name RchShipProbesName; //offset = 380, size = 8
		Int RchShipProbesID; //offset = 388, size = 4
		Float RchShipProbesBonus; //offset = 392, size = 4
		Float RchShipProbesCache; //offset = 396, size = 4
		Name RchShipFuelName; //offset = 400, size = 8
		Int RchShipFuelID; //offset = 408, size = 4
		Float RchShipFuelBonus; //offset = 412, size = 4
		Float RchShipFuelCache; //offset = 416, size = 4
		Name RchShipScannerName; //offset = 420, size = 8
		Int RchShipScannerID; //offset = 428, size = 4
		Float RchShipScannerBonus; //offset = 432, size = 4
		Float RchShipScannerCache; //offset = 436, size = 4
		Name RchShotgunName; //offset = 440, size = 8
		Int RchShotgunID; //offset = 448, size = 4
		Float RchShotgunBonus; //offset = 452, size = 4
		Float RchShotgunCache; //offset = 456, size = 4
		Name RchSniperRifleName; //offset = 460, size = 8
		Int RchSniperRifleID; //offset = 468, size = 4
		Float RchSniperRifleBonus; //offset = 472, size = 4
		Float RchSniperRifleCache; //offset = 476, size = 4
		Name RchTechDmgUpgradeName; //offset = 480, size = 8
		Int RchTechDmgUpgradeID; //offset = 488, size = 4
		Float RchTechDmgUpgradeBonus; //offset = 492, size = 4
		Float RchTechDmgUpgradeCache; //offset = 496, size = 4
		Name RchARResistanceDamageName; //offset = 500, size = 8
		Int RchARResistanceDamageID; //offset = 508, size = 4
		Float RchARResistanceDamageBonus; //offset = 512, size = 4
		Float RchARResistanceDamageCache; //offset = 516, size = 4
		Name RchAssaultRifleAccuracyName; //offset = 520, size = 8
		Int RchAssaultRifleAccuracyID; //offset = 528, size = 4
		Float RchAssaultRifleAccuracyBonus; //offset = 532, size = 4
		Float RchAssaultRifleAccuracyCache; //offset = 536, size = 4
		Name RchAutoPistolResistanceDmgName; //offset = 540, size = 8
		Int RchAutoPistolResistanceDmgID; //offset = 548, size = 4
		Float RchAutoPistolResistanceDmgBonus; //offset = 552, size = 4
		Float RchAutoPistolResistanceDmgCache; //offset = 556, size = 4
		Name RchAutoPistolMaxAmmoName; //offset = 560, size = 8
		Int RchAutoPistolMaxAmmoID; //offset = 568, size = 4
		Float RchAutoPistolMaxAmmoBonus; //offset = 572, size = 4
		Float RchAutoPistolMaxAmmoCache; //offset = 576, size = 4
		Name RchBioticDurationName; //offset = 580, size = 8
		Int RchBioticDurationID; //offset = 588, size = 4
		Float RchBioticDurationBonus; //offset = 592, size = 4
		Float RchBioticDurationCache; //offset = 596, size = 4
		Name RchBioticCooldownName; //offset = 600, size = 8
		Int RchBioticCooldownID; //offset = 608, size = 4
		Float RchBioticCooldownBonus; //offset = 612, size = 4
		Float RchBioticCooldownCache; //offset = 616, size = 4
		Name RchHPistolArmorDmgName; //offset = 620, size = 8
		Int RchHPistolArmorDmgID; //offset = 628, size = 4
		Float RchHPistolArmorDmgBonus; //offset = 632, size = 4
		Float RchHPistolArmorDmgCache; //offset = 636, size = 4
		Name RchHPistolBonusShotName; //offset = 640, size = 8
		Int RchHPistolBonusShotID; //offset = 648, size = 4
		Float RchHPistolBonusShotBonus; //offset = 652, size = 4
		Float RchHPistolBonusShotCache; //offset = 656, size = 4
		Float RchHPistolBonusShotChance; //offset = 660, size = 4
		Name RchMediGelHealName; //offset = 664, size = 8
		Int RchMediGelHealID; //offset = 672, size = 4
		Float RchMediGelHealCache; //offset = 676, size = 4
		Name RchMediGelShieldName; //offset = 680, size = 8
		Int RchMediGelShieldID; //offset = 688, size = 4
		Float RchMediGelShieldCache; //offset = 692, size = 4
		Name RchShepardMeleeResistanceName; //offset = 696, size = 8
		Int RchShepardMeleeResistanceID; //offset = 704, size = 4
		Float RchShepardMeleeResistanceBonus; //offset = 708, size = 4
		Float RchShepardMeleeResistanceCache; //offset = 712, size = 4
		Name RchMeleeUpgradeName; //offset = 716, size = 8
		Int RchMeleeUpgradeID; //offset = 724, size = 4
		Float RchMeleeUpgradeBonus; //offset = 728, size = 4
		Float RchMeleeUpgradeCache; //offset = 732, size = 4
		Int RchMeleePhysLevelBonus; //offset = 736, size = 4
		Int RchMeleePhysLevelCache; //offset = 740, size = 4
		Name RchShieldRestoreName; //offset = 744, size = 8
		Int RchShieldRestoreID; //offset = 752, size = 4
		Float RchShieldRestoreBonus; //offset = 756, size = 4
		Float RchShieldRestoreCache; //offset = 760, size = 4
		Float RchShieldRestoreChance; //offset = 764, size = 4
		Name RchShieldDamageName; //offset = 768, size = 8
		Int RchShieldDamageID; //offset = 776, size = 4
		Float RchShieldDamageBonus; //offset = 780, size = 4
		Float RchShieldDamageCache; //offset = 784, size = 4
		Name RchShotgunResistanceDmgName; //offset = 788, size = 8
		Int RchShotgunResistanceDmgID; //offset = 796, size = 4
		Float RchShotgunResistanceDmgBonus; //offset = 800, size = 4
		Float RchShotgunResistanceDmgCache; //offset = 804, size = 4
		Name RchShotgunMagCountName; //offset = 808, size = 8
		Int RchShotgunMagCountID; //offset = 816, size = 4
		Float RchShotgunMagCountBonus; //offset = 820, size = 4
		Float RchShotgunMagCountCache; //offset = 824, size = 4
		Name RchSniperArmorDmgName; //offset = 828, size = 8
		Int RchSniperArmorDmgID; //offset = 836, size = 4
		Float RchSniperArmorDmgBonus; //offset = 840, size = 4
		Float RchSniperArmorDmgCache; //offset = 844, size = 4
		Name RchSniperHeadShotDmgName; //offset = 848, size = 8
		Int RchSniperHeadShotDmgID; //offset = 856, size = 4
		Float RchSniperHeadShotDmgBonus; //offset = 860, size = 4
		Float RchSniperHeadShotDmgCache; //offset = 864, size = 4
		Name RchTechDurationName; //offset = 868, size = 8
		Int RchTechDurationID; //offset = 876, size = 4
		Float RchTechDurationBonus; //offset = 880, size = 4
		Float RchTechDurationCache; //offset = 884, size = 4
		Name RchTechCooldownName; //offset = 888, size = 8
		Int RchTechCooldownID; //offset = 896, size = 4
		Float RchTechCooldownBonus; //offset = 900, size = 4
		Float RchTechCooldownCache; //offset = 904, size = 4
		Name RchBovineFortitudeName; //offset = 908, size = 8
		Int RchBovineFortitudeID; //offset = 916, size = 4
		Float RchBovineFortitudeBonus; //offset = 920, size = 4
		Float RchBovineFortitudeCache; //offset = 924, size = 4
		Float RchBovineFortitudeChance; //offset = 928, size = 4

		void TecBovineFortitude( BioGlobalVariableTable* gv );
		void TecTechR2( BioGlobalVariableTable* gv );
		void TecTechR1( BioGlobalVariableTable* gv );
		void TecSniperRifleR2( BioGlobalVariableTable* gv );
		void TecSniperRifleR1( BioGlobalVariableTable* gv );
		void TecShotgunR2( BioGlobalVariableTable* gv, BioPawn* Player, SFXWeapon* Weapon );
		void TecShotgunR1( BioGlobalVariableTable* gv );
		void TecShieldR2( BioGlobalVariableTable* gv );
		void TecShieldR1( BioGlobalVariableTable* gv );
		void TecShepardR2( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void TecShepardR1( BioGlobalVariableTable* gv );
		void TecMediGelR2( BioGlobalVariableTable* gv );
		void TecMediGelR1( BioGlobalVariableTable* gv );
		void TecHeavyPistolR2( BioGlobalVariableTable* gv );
		void TecHeavyPistolR1( BioGlobalVariableTable* gv );
		void TecBioticR2( BioGlobalVariableTable* gv );
		void TecBioticR1( BioGlobalVariableTable* gv );
		void TecAutoPistolR2( BioGlobalVariableTable* gv, BioPawn* Player, SFXWeapon* Weapon );
		void TecAutoPistolR1( BioGlobalVariableTable* gv );
		void TecAssaultRifleR2( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void TecAssaultRifleR1( BioGlobalVariableTable* gv );
		void TecTechUpgrade( BioGlobalVariableTable* gv );
		void TecSniperRifle( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void TecShotgun( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void TecShipScanner( BioGlobalVariableTable* gv );
		void TecShipFuel( BioGlobalVariableTable* gv );
		void TecShipProbes( BioGlobalVariableTable* gv );
		void TecShield( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void TecShepardHealth( BioGlobalVariableTable* gv, BioPawn* Player, SFXModule_Damage* DmgModule );
		void TecQuarianShield( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void TecMordinUpgrade( BioGlobalVariableTable* gv );
		void TecMiniGameHack( BioGlobalVariableTable* gv );
		void TecMiniGameDecrypt( BioGlobalVariableTable* gv );
		void TecMedigelUpgrade( BioGlobalVariableTable* gv );
		void TecLegionUpgrade( BioGlobalVariableTable* gv, Array<BioPawn*> Squad, BioPawn* Member, SFXShield_Base* Shields );
		void TecJackUpgrade( BioGlobalVariableTable* gv );
		void TecHeavyPistol( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void TecHeavyAmmo( BioGlobalVariableTable* gv, BioPawn* Player, SFXHeavyWeapon* Weapon );
		void TecGruntUpgrade( BioGlobalVariableTable* gv, Array<BioPawn*> Squad, BioPawn* Member );
		void TecExploreScanner( BioGlobalVariableTable* gv );
		void TecBioticUpgrade( BioGlobalVariableTable* gv );
		void TecAutoPistol( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void TecAssaultRifle( BioGlobalVariableTable* gv, Array<BioPawn*> Squad );
		void ScaleSquadShields( Array<BioPawn*> Squad, BioPawn* Member, SFXShield_Base* Shields );
		void ScaleSquadWeapons( Class* WeaponClass, Array<BioPawn*> Squad, BioPawn* Member, SFXWeapon* Weapon );
		void GetPlayerSquad( BioWorldInfo* WorldInfo, Array<BioPawn*> Squad, BioPawn* Player, BioPawn* Member, Int Index );
		void AwardTechBonus( Name nmTech, BioWorldInfo* WorldInfo, BioGlobalVariableTable* gv, Array<BioPawn*> Squad, BioPawn* Player );
		void UpdateCache( BioWorldInfo* WorldInfo, BioGlobalVariableTable* gv, Array<BioPawn*> Squad, BioPawn* Player );
		void CacheExportIDs( BioWorldInfo* WorldInfo, BioGlobalVariableTable* gv, Name FooIndex );
	};

	class BioSeqAct_PlotTreasureTester: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PlotTreasureTester, SequenceAction, SFXGame )

	public:

		void ValidateTechSheet( SFXPlotTreasure* oTreasure, Name nmTech, STech stTech, Int I, Int nSrTitle, Int nSrName, Int nSrMessage, Int nSrDescription, Int nLevels );
		void ValidateTreasureSheet( SFXPlotTreasure* oTreasure, Int I, STreasure stTreasure, STech stTech, Name nmLevel, Name nmTreasure, Name nmTech, Name nmResource, Name nmRequiredTech, Int nTreasureId, Int nPrice, Int nRequiredTechLevel );
		void ValidateResourcesSheet( SFXPlotTreasure* oTreasure, SResourceBudget stResource, Name nmLevel, Int I, Int nCredits, Int Eezo, Int Palladium, Int Platinum, Int Iridium, Int Id );
		void Validate( SFXPlotTreasure* oTreasure );
		void Activated( BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure );
	};

	struct HenchmanInfoStruct
	{
		Name ClassName; //offset = 0, size = 8
		Name Tag; //offset = 8, size = 8
		PrettyName PrettyName; //offset = 16, size = 4
		AlternatePrettyName AlternatePrettyName; //offset = 20, size = 4
		Name AlternateHenchNamePlotFlag; //offset = 24, size = 8
		Int HenchAcquiredPlotID; //offset = 32, size = 4
		Int HenchInSquadPlotID; //offset = 36, size = 4
		String HenchmanImage; //offset = 40, size = 12
	};

	class SFXPawn_Henchman: public SFXPawn
	{
		DECLARE_PACKAGE_CLASS( SFXPawn_Henchman, SFXPawn, SFXGame )

	public:
		struct BioPawn
		{
			/*
			UpdateCombatMode
			*/
		};

		struct Downed
		{
			/*
			EndState
			BeginState
			*/
		};


		Float PowerUseDelay; //offset = 2156, size = 4
		Class* DefaultWeapon; //offset = 2160, size = 4
		SkeletalMeshComponent* HelmetMesh; //offset = 2164, size = 4
		SkeletalMeshComponent* VisorMesh; //offset = 2168, size = 4
		SkeletalMeshComponent* BreatherMesh; //offset = 2172, size = 4
		Bool bHelmetHidesHead: 1; //offset = 2176, size = 4
		Texture2D* m_GUI_Icon; //offset = 2180, size = 4
		Texture2D* m_GUI_Icon_Dead; //offset = 2184, size = 4
		Name m_nmMappedPower; //offset = 2188, size = 8
		Array<HenchmanInfoStruct> HenchmenInfo; //offset = 2196, size = 12

		void CreateWeapons( SFXLoadoutData* ChkLoadout, Class* WeaponClass, SFXPlayerSquadLoadoutData* PlayerLoadout, Int I, BioPlayerController* PC, SFXEngine* Engine );
		void GetDefaultLoadout( Name HTag, String DLoadout, Array<LoadoutWeaponInfo> WeaponGroup, LoadoutWeaponInfo WeaponInfo, Int idx, Int WIdx, Int WRating, String WClassName );
		Int GetMaxAttackTickets(, Int Tickets );
		Int GetMaxTargetTickets(, Int Tickets );
		void PlayDeathVocalization( BioPawn* Killer );
		void SetRTPCHelmetIsEnabled( WwiseAudioComponent* WwiseComponent );
		Texture2D* GetGUIIcon( Bool bDeadIcon );
		void ValidateRagdoll();
		void InitializeHenchman( Int DesiredLevel, BioWorldInfo* BWI, BioPlayerController* PC, SFXEngine* Engine );
		void SpawnDefaultWeapons( SFXInventoryManager* InventoryManager, SFXLoadoutData* ChkLoadout );
		Bool Resurrect( Float PercentOfHealthRegained, Bool bIsInstantaneous );
		void Revive( Actor* User );
		void PostBeginPlay( SFXModule_Radar* RadarMod );
		Bool GetAttackOrderPower( SFXPower* Power );
		Bool InCombat(, SFXGame* GameInfo );
		void OutsideWorldBounds( SFXAI_Henchman* oHench );
		void FellOutOfWorld( Class* dmgType, SFXAI_Henchman* oHench );
		Int GetScaledLevel();
		void ForceHelmetVisibility( Bool bHelmetVisible );
		void ShowHelmet( Bool bShowHelmet );
	};

	enum HenchmanOrderType
	{
		HENCHMAN_ORDER_NONE,
		HENCHMAN_ORDER_USE_POWER,
		HENCHMAN_ORDER_SWITCH_WEAPON,
		HENCHMAN_ORDER_ATTACK_TARGET,
	};

	struct HenchmanOrder
	{
		Byte eOrderType; //offset = 0, size = 1
		Actor* oTargetActor; //offset = 4, size = 4
		Vector vTargetLocation; //offset = 8, size = 12
		Name nmPower; //offset = 20, size = 8
		SFXWeapon* oWeapon; //offset = 28, size = 4
		Bool bInstantOrder: 1; //offset = 32, size = 4
		Bool bExecutingOrder: 1; //offset = 32, size = 4
		Bool bPowerUseIsInstant: 1; //offset = 32, size = 4
	};

	class SFXAI_Henchman: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_Henchman, SFXAI_Core, SFXGame )

	public:
		struct BackingAwayFromTarget
		{
			/*
			PoppedState
			PushedState
			*/
		};

		struct MovingToLocation
		{
			/*
			ShouldCancelMove
			*/
		};

		struct WaitingForAnimatedTransition
		{
			/*
			ExecuteOrders
			*/
		};

		struct FiringWeapon
		{
			/*
			NotifyBump
			ExecuteOrders
			*/
		};

		struct MovingToHoldLocation
		{
			/*
			PathfindToHoldLocation
			MoveToCoverNearHoldLocation
			ContinuedState
			PoppedState
			PushedState
			*/
		};

		struct MovingAwayFromPlayer
		{
			/*
			GetMoveLocation
			EndState
			BeginState
			*/
		};

		struct Resurrecting
		{
			/*
			ResurrectHenchman
			*/
		};

		struct Dying
		{
		};

		struct MovingToGoal
		{
			/*
			CancelAction
			GetFirstMoveTarget
			FinishPathGeneration
			ApplyPathConstraints
			GetPeriodicMoveInterval
			PoppedState
			*/
		};

		struct FollowingActor
		{
			/*
			ShouldCancelFollow
			*/
		};

		struct Combat_Henchman
		{
			/*
			NotifyBump
			ContinuedState
			PoppedState
			PushedState
			*/
		};

		struct UsingPower
		{
			/*
			ShouldCancelPower
			WasPowerUseOrderedByPlayer
			ChoosePowerTarget
			*/
		};

		struct ExecutingOrders
		{
			/*
			ExecuteHoldPositionOrder
			ExecuteSwitchWeaponOrder
			ExecuteFollowOrder
			ExecuteAttackOrder
			ExecutePowerOrder
			PoppedState
			PushedState
			*/
		};

		struct ResetHenchman
		{
			/*
			TeleportToPlayer
			*/
		};

		struct Idle
		{
			/*
			ChooseBehavior
			NotifyNewEnemy
			NotifyBump
			ExecuteOrders
			EndState
			BeginState
			*/
		};


		Array<HenchmanOrder> m_Orders; //offset = 1368, size = 12
		Bool m_bFollowPlayer: 1; //offset = 1380, size = 4
		Bool m_bHoldingPosition: 1; //offset = 1380, size = 4
		Bool m_bResetHenchman: 1; //offset = 1380, size = 4
		Bool m_bDelayPowerUse: 1; //offset = 1380, size = 4
		Bool m_bTooFarToAttack: 1; //offset = 1380, size = 4
		Bool m_bMeleeAttacker: 1; //offset = 1380, size = 4
		Bool m_bEnemiesPerceived: 1; //offset = 1380, size = 4
		Bool m_bCheckPlayerReachability: 1; //offset = 1380, size = 4
		Bool m_bOriginalStartRootMotion: 1; //offset = 1380, size = 4
		Bool m_bOriginalStopRootMotion: 1; //offset = 1380, size = 4
		Bool m_bBackingAwayFromTarget: 1; //offset = 1380, size = 4
		Vector m_vHoldLocation; //offset = 1384, size = 12
		Float TetherDistance; //offset = 1396, size = 4
		Float TetherDistanceWhileExecutingOrder; //offset = 1400, size = 4
		Float TetherDistanceForFollowOrder; //offset = 1404, size = 4
		Float DistanceToStartCombatWhileFollowing; //offset = 1408, size = 4
		Float AttackDelayAfterBeingShot; //offset = 1412, size = 4
		Float DamagePercentToRemainInCover; //offset = 1416, size = 4
		SFXAI_Henchman* m_OtherHenchman; //offset = 1420, size = 4
		Float m_fHeadshotProbability; //offset = 1424, size = 4
		Actor* m_ActorToDefend; //offset = 1428, size = 4
		Float m_fDistanceFromActorToDefend; //offset = 1432, size = 4
		Float MinDistanceFromTargetForCrouch; //offset = 1436, size = 4
		Goal_AtCover* AtCover_NearDefendGoal; //offset = 1440, size = 4
		Bool m_bAllowInstantPowerWhileVisible: 1; //offset = 1444, size = 4
		Int m_nCoverEvaluationCount; //offset = 1448, size = 4
		Int m_nBackingAwayCount; //offset = 1452, size = 4
		Float MaxBackAwayDistance; //offset = 1456, size = 4

		void CheckThreatRadius();
		Bool IsWithinThreatRadius(, BioPawn* TargetPawn );
		void NotifyKnockedOutOfCover();
		Bool CanInstantlyUsePowers();
		void InstantUsePower( Actor* TargetActor, Vector TargetLocation, Name PowerName, SFXPower* Power, Byte PowerType, Float CooldownRemaining, BioActivePower* PowerActive );
		void OnCombatStart();
		Bool IsPlayerReachable(, Pawn* oPlayer, Bool bReachable, Actor* oFirstMoveTarget );
		Bool ShouldWaitForPlayer(, BioPlayerSquad* PlayerSquad, Float PlayerDistance, Float HenchmanDistance );
		void AdjustEnemyRating( Pawn* EnemyPawn, Float fRating, BioPawn* EnemyBioPawn );
		void AdjustRatingByTickets( Float out_Rating, Int EnemyIdx );
		void CheckInCombat();
		void NotifyNewEnemy( Pawn* NewEnemy );
		void ApplyOrderBonus( SFXModule_GameEffectManager* Manager, SFXGameEffect* Effect );
		void ModifyBurstDelay( SFXWeapon* Weapon, Float BurstDelay );
		void OnTargetChanged( BioPlayerSquad* PlayerSquad );
		void CheckMeleeAttacker( Vector HitLocation, Vector HitNormal, Actor* HitActor );
		void CheckLineOfFireClear( Int nPlayerIsFiring );
		void CheckPlayerLineOfFire( Int nPlayerIsFiring );
		Bool IsInPlayerLineOfFire( Int nPlayerIsFiring, BioPlayerSquad* PlayerSquad, BioPawn* Player, BioPlayerController* PlayerController, SFXPlayerCamera* PlayerCamera, Vector vHenchmanLocationWithoutZ, Vector vCameraRotationWithoutZ, Float fAngle, Float fDistance, Float fLineOfFireAngle );
		void StopDefendingActor();
		Bool StartDefendingActor( Actor* ActorToDefend, Float fMaxDistanceFromActor );
		Bool StartFollowingActor( Actor* ActorToFollow );
		Vector GetAimLocation( Int EnemyIdx, Vector StartLoc, BioPawn* oEnemyPawn, Vector vHeadLocation );
		void NotifyPowerDelayFinished();
		void NotifySharedCooldownFinished( SFXPawn_Henchman* oPawn );
		Bool ArePowersCoolingDown();
		void NotifyHenchmenLoaded( Pawn* oSquadMember, SFXAI_Henchman* oController, Int nCount, Int nIndex );
		void OnEnteringStasis( BioWorldInfo* oWorldInfo, BioPlayerSquad* oPlayerSquad );
		Bool ShouldAttack(, Int nPlayerIsFiring );
		Bool CanUsePowers( Bool bCheckProfileOption, Pawn* Player, PlayerController* Controller, SFXPRI* PRI );
		Bool ChooseDefensivePower( Name nmPower );
		Bool ChooseAttackPowerHelper( Actor* oTarget, Bool bPlayerRequest, Name nmPower, Int nRequiresAttackTicket, Vector AttackOrigin );
		Bool ChooseAttackPower( Actor* oTarget, Name nmPower, Int nRequiresAttackTicket, Vector AttackOrigin );
		Bool RespondToBump( Actor* Other, Vector HitNormal );
		Bool NotifyBump( Actor* Other, Vector HitNormal );
		Bool WantsToRun( Float fDistance );
		void SetSquadIntoCombat( BioPlayerSquad* oPlayerSquad );
		Bool IsInCombat();
		Bool IsInMoveTo();
		Bool ShouldFollowPlayer(, BioPlayerSquad* oPlayerSquad, Float fDistance );
		Bool TeleportToActor( Actor* oActor, Bool bForceTeleport, Bool bResult );
		void NotifyUnderAttack( Bool bHit );
		void ResetFarAwayFlag();
		Bool NotifyCoverClaimViolation( Controller* NewClaim, CoverLink* Link, Int SlotIdx );
		Bool HenchmanMoveToCover(, Int nIndex, CovGoal_GoalProximity* Proximity );
		void BioClearCrossLevelReferences( Level* oLevel, Int nIndex );
		void NotifyChangedWeapon( Weapon* PreviousWeapon, Weapon* NewWeapon );
		void TriggerAttackVocalization();
		void OutOfWorld();
		HenchmanOrder GetNextOrder( Byte eOrder, HenchmanOrder oNoneOrder, Int nOrder );
		void ExecuteOrders();
		void RemoveOldSwitchWeaponOrders( Int nIndex );
		Bool CanStartImmediateOrder(, Int nQueuedInstantOrders );
		Bool CanQueueOrder(, Int nQueuedInstantOrders );
		Bool CancelOrder( Byte eOrder, Name nmPower, Int nIndex );
		Int GetInstantOrderCount(, Int nCount, Int nIndex );
		Bool AddOrder( Byte eOrder, Actor* oTargetActor, Vector vTargetLocation, Name nmPower, SFXWeapon* oWeapon, Int nQueue, Int nIndex, Bool bInstantOrder, Int nCurrentIndex, Int nQueuePosition );
	};

	class SFXCharacterClass: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXCharacterClass, Object, SFXGame )

	public:

		SFXLoadoutData* Loadout; //offset = 60, size = 4
		Float BioticStrength; //offset = 64, size = 4
		Float TechStrength; //offset = 68, size = 4
		Float CombatStrength; //offset = 72, size = 4
		String ClassName; //offset = 76, size = 12
		Int srClassName; //offset = 88, size = 4
		Int srClassDesc; //offset = 92, size = 4
		Int srClassPrimaryDesc; //offset = 96, size = 4
		Int srClassSecondaryDesc; //offset = 100, size = 4
		Array<Name> MappedPowers; //offset = 104, size = 12
		Byte ClassType; //offset = 116, size = 1
	};

	const char* UUToM = 0.0;

	enum SFXPowerTutorialType
	{
		PowerTutorial_Pull,
		PowerTutorial_Unity,
	};

	class BioHintSystem: public BioHintSystemBase
	{
		DECLARE_PACKAGE_CLASS( BioHintSystem, BioHintSystemBase, SFXGame )

	public:

		Bool m_bInCombat: 1; //offset = 232, size = 4
		Bool m_bUsingHeavyWeapon: 1; //offset = 232, size = 4
		Bool m_bUsingSniperRifle: 1; //offset = 232, size = 4
		Bool m_bUsingShotgun: 1; //offset = 232, size = 4
		Bool m_bUsingAmmoPower: 1; //offset = 232, size = 4
		Bool m_bHasAnyAmmoPowers: 1; //offset = 232, size = 4
		Bool m_bAnyHenchmenDead: 1; //offset = 232, size = 4
		Bool m_bPowerWheelTutorialEnabled: 1; //offset = 232, size = 4
		Bool m_bWeaponWheelTutorialEnabled: 1; //offset = 232, size = 4
		Bool m_bShowingSelectHint: 1; //offset = 232, size = 4
		Float m_fAmmoPercent; //offset = 236, size = 4
		Float m_fHealthPercent; //offset = 240, size = 4
		Float m_fNearestEnemyDistance; //offset = 244, size = 4
		Name m_nmCurrentWeapon; //offset = 248, size = 8
		Name m_nmLastUsedPower; //offset = 256, size = 8
		Name m_nmMappedPower; //offset = 264, size = 8
		Name m_nmLeftMappedPower; //offset = 272, size = 8
		Name m_nmRightMappedPower; //offset = 280, size = 8
		Name m_nmClassMappedPower; //offset = 288, size = 8
		Name m_nmNearestEnemy; //offset = 296, size = 8
		Int m_nMedigel; //offset = 304, size = 4
		Int m_nMostUnspentTalentPoints; //offset = 308, size = 4
		Float m_fRealTimeSeconds; //offset = 312, size = 4
		Byte m_ePowerTutorialType; //offset = 316, size = 1
		Name m_nmTutorialSelectHint; //offset = 320, size = 8
		Name m_nmTutorialHighlightHint; //offset = 328, size = 8

		void AddNotificationOneParameter( SFXNotificationData oNoteData, Int nParam1, SFXNotification oNotification );
		void JournalUpdate( srTitle srTitle, srDescription srDescription, SFXNotificationData oNoteData );
		void CodexUpdate( srTitle srTitle, srDescription srDescription, SFXNotificationData oNoteData, BioPlayerController* oController );
		void AddNotification_HeavyAmmoFull();
		void AddNotification_MediGelFull();
		void AddNotification_SalvageRecovery( Int Amount );
		void AddNotification_ProbeRecovery( Int Amount );
		void AddNotification_LevelUp( Int Level );
		void AddNotification_XP( Int Amount );
		void AddNotification_TechUnlocked( String sTitle, String sName, String sMessage, Texture* oImage, SFXNotificationData oNotificationData );
		void AddNotification_Tech( String sTitle, String sName, String sMessage, Texture* oImage, SFXNotificationData oNotificationData );
		void AddNotification_Weapon( String sTitle, String sName, String sMessage, Texture* oImage, SFXNotificationData oNotificationData );
		void AddNotification_ResearchRecovered( String sName, String sMessage, Texture* oImage, SFXNotificationData oNotificationData, String sTitle );
		Bool PowerCast( Name nmContext );
		void UpdateWeaponWheelTutorialHint( Int nWeaponType, BioWorldInfo* oWorldInfo, MassEffectGuiManager* Manager, HintDefinition oHint, Name nmHint );
		void UpdatePowerWheelTutorialHint( Name nmPower, BioWorldInfo* oWorldInfo, MassEffectGuiManager* Manager, Name nmHint, Name nmMatchingPowerName, HintDefinition oHint );
		void GeneratePowerWheelTutorialHint( Bool bPowerWheel, Bool bWeaponWheel, BioWorldInfo* oWorldInfo, MassEffectGuiManager* Manager, HintDefinition oHint, Bool bShowHint );
		Bool FindHintDefinition( Name nmHint, HintDefinition oHint, Bool bFound, Int I );
		void EnableWeaponTutorialHint( Bool bOn );
		void EnablePowerTutorialHint( Bool bOn, Byte eTutType );
		Bool UseAmmoPowerHint(, Int nReloadLimit, HintTrackingData oHintData, HintTrackingData oCombatData, HintTrackingData oReloadData, HintTrackingData oSwitchWeaponData, Float fReloadTime, BioPlayerController* PC );
		Bool FindLandingSite(, HintTrackingData oOpenScanner, HintTrackingData oCloseScanner, HintTrackingData oStartScanning, HintTrackingData oAnomaly, Float fOpenScanner, Float fCloseScanner, Float fStartScanning, Float fAnomaly );
		Bool LaunchProbeHint(, HintTrackingData oOpenScanner, HintTrackingData oCloseScanner, HintTrackingData oStartScanning, HintTrackingData oFireProbe, HintTrackingData oAnomaly, Float fOpenScanner, Float fCloseScanner, Float fStartScanning, Float fFireProbe, Float fAnomaly );
		Bool PlanetScanHint(, HintTrackingData oOpenScanner, HintTrackingData oCloseScanner, HintTrackingData oStartScanning, Float fOpenScanner, Float fCloseScanner, Float fStartScanning );
		Bool CooldownHint(, HintTrackingData oHintData );
		Bool LevelUpHint();
		Bool HackGameHint(, HintTrackingData oStartedHack, HintTrackingData oClearEvent, Float TimeSinceStart, Float TimeSinceClear );
		Bool BypassGameHint(, HintTrackingData oStartedBypass, HintTrackingData oClearEvent, Float TimeSinceStart, Float TimeSinceClear );
		Bool ResurrectHint();
		Bool MeleeHint(, HintTrackingData oMelee, HintTrackingData oMeleeDamaged, HintTrackingData oHuskMeleeDamaged );
		Bool ClassMappedPowerHint(, HintTrackingData oCast, HintTrackingData oUseMapped, Float fLastCastTime, Float fDelta );
		Bool RightMappedPowerHint(, HintTrackingData oCast, HintTrackingData oUseMapped, Float fLastCastTime, Float fDelta );
		Bool LeftMappedPowerHint(, HintTrackingData oCast, HintTrackingData oUseMapped, Float fLastCastTime, Float fDelta );
		Bool PCMappedPowerHint(, HintTrackingData oCast, HintTrackingData oUseMapped );
		Bool ZoomHint(, HintTrackingData oFired, HintTrackingData oEnteredCombat, HintTrackingData oZoomed, HintTrackingData oSwitchWeaponData, Float TimeSince10thLastShot );
		Bool TakeCoverHint(, HintTrackingData oTakeCover, HintTrackingData oLeaveCover );
		Bool ManualReloadHint(, HintTrackingData oManual, HintTrackingData oFast, HintTrackingData oReload );
		void CacheCurrentState( BioWorldInfo* oWorldInfo, BioPlayerController* oController, BioPawn* oPawn, BioBaseSquad* oSquad, BioPlayerInput* oInput, SFXInventoryManager* oInvManager, SFXWeapon* oWeapon, LocalEnemy oEnemy, Float fDist, Int nSquadIndex, SFXPawn_Henchman* oHenchman );
	};

	class BioComplexFloatAttribute: public Object
	{
		DECLARE_PACKAGE_CLASS( BioComplexFloatAttribute, Object, SFXGame )

	public:
	};

	class BioComplexIntAttribute: public Object
	{
		DECLARE_PACKAGE_CLASS( BioComplexIntAttribute, Object, SFXGame )

	public:
	};

	class BioConditionals: public Object
	{
		DECLARE_PACKAGE_CLASS( BioConditionals, Object, SFXGame )

	public:
	};

	enum EXPCurveSet
	{
		EXPCurve_NoReward,
		EXPCurve_MinionKill,
		EXPCurve_EliteKill,
		EXPCurve_SubBossKill,
		EXPCurve_BossKill,
		EXPCurve_SkillUse,
	};

	class BioConsequenceFunctions: public Object
	{
		DECLARE_PACKAGE_CLASS( BioConsequenceFunctions, Object, SFXGame )

	public:

		void GrantBonusTalents( BioWorldInfo* WorldInfo, Int bonusIdentifier, BioTalentContainer* talents );
		void GrantCredits( BioWorldInfo* WorldInfo, Int Count, BioPawn* oPlayerPawn, SFXInventoryManager* oInventory );
		void GrantMediGel( BioWorldInfo* WorldInfo, Int Count, BioPawn* oPlayerPawn, SFXInventoryManager* oInventory );
		void GrantScaledXP( BioWorldInfo* WorldInfo, Int Curve );
	};

	class BioCoverCollisonCube: public PrimitiveComponent
	{
		DECLARE_PACKAGE_CLASS( BioCoverCollisonCube, PrimitiveComponent, SFXGame )

	public:
	};

	class BioCoverVolume: public Volume
	{
		DECLARE_PACKAGE_CLASS( BioCoverVolume, Volume, SFXGame )

	public:
	};

	class BioEventDispatcher: public Object
	{
		DECLARE_PACKAGE_CLASS( BioEventDispatcher, Object, SFXGame )

	public:
	};

	class BioCustomAction_CombatActivate: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_CombatActivate, BioCustomAction, SFXGame )

	public:

		BodyStance BS_CombatActivate; //offset = 108, size = 12

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void ContinueCustomAction();
		void PauseCustomAction();
		void StartCustomAction();
	};

	enum ECoverBodyStanceID
	{
		ECS_None,
		ECS_FromExplore,
		ECS_FromCombat,
	};

	class BioCustomAction_CoverClimbMantleBase: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_CoverClimbMantleBase, BioCustomAction, SFXGame )

	public:

		BodyStance m_BS_StanceFromExplore; //offset = 108, size = 12
		BodyStance m_BS_StanceFromCombat; //offset = 120, size = 12
		BodyStance m_BS_StanceFromCover; //offset = 132, size = 12
		Byte m_CurrentBodyStance; //offset = 144, size = 1
		Bool m_bCoverCacheValid: 1; //offset = 148, size = 4
		CovPosInfo m_CurrentCoverInfo; //offset = 152, size = 52
		Float m_fCollisionOffPerioud; //offset = 204, size = 4
		Float m_fCollisionOffTime; //offset = 208, size = 4

		void CacheCoverInfo( CovPosInfo CoverInfo );
		void EndPlayBodyStance( Byte StanceID, BodyStance Stance );
		void StopPlayBodyStance( Byte StanceID, BodyStance Stance );
		Bool StartPlayBodyStance( Byte StanceID, BodyStance Stance, Float fBlendOutTime );
		Bool GetBodyStance( Byte StanceID, BodyStance out_BodyStance );
		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void TickCustomAction( Float fDeltaTime );
		void StopCustomAction();
		void StartCustomAction( BioEpicPawnBehavior* PawnBehavior, Bool bPlaySuccess, Bool bWasInCover );
	};

	class BioCustomAction_CoverClimb: public BioCustomAction_CoverClimbMantleBase
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_CoverClimb, BioCustomAction_CoverClimbMantleBase, SFXGame )

	public:

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void StartCustomAction();
	};

	class BioCustomAction_CoverMantle: public BioCustomAction_CoverClimbMantleBase
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_CoverMantle, BioCustomAction_CoverClimbMantleBase, SFXGame )

	public:

		Vector vStartLocation; //offset = 212, size = 12
		Array<Actor*> aBumpList; //offset = 224, size = 12

		Bool NotifyBump( Actor* Other, Vector HitNormal, Vector vDir );
		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction( Vector vDir2D );
		void StartCustomAction();
	};

	class BioCustomAction_DeathCrawl: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_DeathCrawl, BioCustomAction, SFXGame )

	public:

		BodyStance BS_DeathCrawl; //offset = 108, size = 12

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void StartCustomAction();
	};

	class BioCustomAction_KroganSmash: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_KroganSmash, BioCustomAction, SFXGame )

	public:

		BodyStance BS_Smash; //offset = 108, size = 12

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void StartCustomAction();
	};

	class BioCustomAction_PraetorianTeleport: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_PraetorianTeleport, BioCustomAction, SFXGame )

	public:

		BodyStance BS_TeleportAction; //offset = 108, size = 12

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void StartCustomAction();
	};

	class BioCustomAction_PraetorianTeleportEnd: public BioCustomAction_PraetorianTeleport
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_PraetorianTeleportEnd, BioCustomAction_PraetorianTeleport, SFXGame )

	public:
	};

	class BioCustomAction_PraetorianTeleportStart: public BioCustomAction_PraetorianTeleport
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_PraetorianTeleportStart, BioCustomAction_PraetorianTeleport, SFXGame )

	public:
	};

	class BioCustomAction_WaypointAnimation: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( BioCustomAction_WaypointAnimation, BioCustomAction, SFXGame )

	public:

		BodyStance BS_WaypointAnim; //offset = 108, size = 12

		Bool SetWaypointAnim( Name AnimName, Int eStance );
		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void StartCustomAction();
	};

	class BioDamageComponentSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioDamageComponentSaveObject, BioBaseSaveObject, SFXGame )

	public:
	};

	enum EAICustomAction
	{
		AI_CustomAction_None,
		AI_CustomAction_CollectorDeath,
		AI_CustomAction_PraetorianDeath,
		AI_CustomAction_DeathCrawl,
		AI_CustomAction_Frozen,
		AI_CustomAction_Ragdoll,
		AI_CustomAction_BovineFortitude,
		AI_CustomAction_Charge,
		AI_CustomAction_CombatActivate,
		AI_CustomAction_CoverClimb,
		AI_CustomAction_CoverMantle,
		AI_CustomAction_WaypointAnim,
		AI_CustomAction_Freezing,
		AI_CustomAction_Possessed,
		AI_CustomAction_Knockback,
		AI_CustomAction_HeadShot,
		AI_CustomAction_GreatPain,
		AI_CustomAction_Staggering,
		AI_CustomAction_Reave,
		AI_CustomAction_ScionHeadless,
		AI_CustomAction_HitLeftLeg,
		AI_CustomAction_HitRightLeg,
		AI_CustomAction_CorkscrewDeath,
		AI_CustomAction_ExplosionDeath,
		AI_CustomAction_LeftArmDeath,
		AI_CustomAction_RightArmDeath,
		AI_CustomAction_StomachDeath,
		AI_CustomAction_DeathKnockback,
		AI_CustomAction_OnFire,
		AI_CustomAction_TakeAKnee,
		AI_CustomAction_StaggerImpact,
		AI_CustomAction_StandardImpact,
		AI_CustomAction_ZombieTakeAKnee,
		AI_CustomAction_ScionImpact,
		AI_CustomAction_HuskImpact,
		AI_CustomAction_ShieldKnockback,
		AI_CustomAction_ShieldStaggerImpact,
		AI_CustomAction_ShieldStandardImpact,
		AI_CustomAction_GlobalDeath,
		AI_CustomAction_TentacleDeath,
		AI_CustomAction_OculusDeath,
		AI_CustomAction_NeuralShock,
		AI_CustomAction_BioticCharge,
		AI_CustomAction_HeavyPunch,
		AI_CustomAction_Swipe,
		AI_CustomAction_PraetorianTeleportStart,
		AI_CustomAction_PraetorianTeleportEnd,
		AI_CustomAction_PlayerStagger,
		AI_CustomAction_PlayerMeleed,
		AI_CustomAction_PlayerMeleedII,
	};

	class SFXCustomActionTypes: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXCustomActionTypes, Object, SFXGame )

	public:
	};

	class BioDamageTypeCanister: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( BioDamageTypeCanister, SFXDamageType, SFXGame )

	public:
	};

	class BioDamageTypePhysics: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( BioDamageTypePhysics, SFXDamageType, SFXGame )

	public:
	};

	class BioDeathVFXControlBasic: public BioDeathVFXControl
	{
		DECLARE_PACKAGE_CLASS( BioDeathVFXControlBasic, BioDeathVFXControl, SFXGame )

	public:
	};

	class BioDeathVFXGameState: public Object
	{
		DECLARE_PACKAGE_CLASS( BioDeathVFXGameState, Object, SFXGame )

	public:
	};

	class BioDeathVFXSpecArrayWrapper: public BioDeathVFXCore
	{
		DECLARE_PACKAGE_CLASS( BioDeathVFXSpecArrayWrapper, BioDeathVFXCore, SFXGame )

	public:
	};

	enum EBioForceFeedbackPlayer
	{
		BIO_FORCE_FEEDBACK_PLAYER_COVER,
		BIO_FORCE_FEEDBACK_PLAYER_DRAW,
		BIO_FORCE_FEEDBACK_PLAYER_HOLSTERED,
		BIO_FORCE_FEEDBACK_PLAYER_WEAPON_CLOSE,
	};

	class BioForceFeedbackPlayer: public Object
	{
		DECLARE_PACKAGE_CLASS( BioForceFeedbackPlayer, Object, SFXGame )

	public:
	};

	class BioGameEffectAdjustStability: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectAdjustStability, BioGameEffect, SFXGame )

	public:
	};

	class BioGameEffectItemAddXModSlots: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectItemAddXModSlots, BioGameEffect, SFXGame )

	public:

		Int m_type; //offset = 96, size = 4
		Int m_count; //offset = 100, size = 4
	};

	class BioGameEffectItemPopXModSlots: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectItemPopXModSlots, BioGameEffect, SFXGame )

	public:

		Int m_type; //offset = 96, size = 4
		Int m_count; //offset = 100, size = 4
	};

	class BioGameEffectItemRemoveXModSlot: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectItemRemoveXModSlot, BioGameEffect, SFXGame )

	public:

		Int m_type; //offset = 96, size = 4
		Int m_index; //offset = 100, size = 4
	};

	class BioGameEffectSuppression: public BioGameEffect
	{
		DECLARE_PACKAGE_CLASS( BioGameEffectSuppression, BioGameEffect, SFXGame )

	public:

		Float m_fDuration; //offset = 96, size = 4

		void Create( BioGameProperty* oProperty, BioGameEffectSuppression* oEffect );
	};

	class BioGameModeBase: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGameModeBase, Object, SFXGame )

	public:
	};

	class BioGameModeBaseScaleForm: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeBaseScaleForm, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeCinematic: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeCinematic, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeConversation: public BioGameModeBaseScaleForm
	{
		DECLARE_PACKAGE_CLASS( BioGameModeConversation, BioGameModeBaseScaleForm, SFXGame )

	public:
	};

	class BioGameModeDefault: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeDefault, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeEmpty: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeEmpty, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeGalaxyBase: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeGalaxyBase, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeGalaxy: public BioGameModeGalaxyBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeGalaxy, BioGameModeGalaxyBase, SFXGame )

	public:
	};

	class BioGameModeIngamePropertyEditor: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeIngamePropertyEditor, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeManager: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGameModeManager, Object, SFXGame )

	public:
	};

	class BioGameModeMiniGame: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeMiniGame, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeMovie: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeMovie, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeOrbital: public BioGameModeGalaxyBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeOrbital, BioGameModeGalaxyBase, SFXGame )

	public:
	};

	class BioGameModePopUp: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModePopUp, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeScaleForm: public BioGameModeBaseScaleForm
	{
		DECLARE_PACKAGE_CLASS( BioGameModeScaleForm, BioGameModeBaseScaleForm, SFXGame )

	public:
	};

	class BioGameModeSpectator: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeSpectator, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameModeSquadCommand_Commands: public BioGameModeBaseScaleForm
	{
		DECLARE_PACKAGE_CLASS( BioGameModeSquadCommand_Commands, BioGameModeBaseScaleForm, SFXGame )

	public:
	};

	class BioGameModeTerrain: public BioGameModeGalaxyBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeTerrain, BioGameModeGalaxyBase, SFXGame )

	public:
	};

	class BioGameModeVehicle: public BioGameModeBase
	{
		DECLARE_PACKAGE_CLASS( BioGameModeVehicle, BioGameModeBase, SFXGame )

	public:
	};

	class BioGameReplicationInfo: public GameReplicationInfo
	{
		DECLARE_PACKAGE_CLASS( BioGameReplicationInfo, GameReplicationInfo, SFXGame )

	public:

		Bool Temp: 1; //offset = 656, size = 4
	};

	class BioGamerProfile: public Object
	{
		DECLARE_PACKAGE_CLASS( BioGamerProfile, Object, SFXGame )

	public:
	};

	class SFXModule_AimAssist: public SFXModule
	{
		DECLARE_PACKAGE_CLASS( SFXModule_AimAssist, SFXModule, SFXGame )

	public:

		Float GlobalFrictionFactor; //offset = 68, size = 4
		Float GlobalAimCorrectionFactor; //offset = 72, size = 4
		Vector GlobalAdhesionFactor; //offset = 76, size = 12
		Float EnemyMovementAdhesionFactor; //offset = 88, size = 4
		Float LastDistToTarget; //offset = 92, size = 4
		Float LastDistMultiplier; //offset = 96, size = 4
		Float LastDistFromAimZ; //offset = 100, size = 4
		Float LastDistFromAimY; //offset = 104, size = 4
		Float LastFrictionMultiplier; //offset = 108, size = 4
		Float LastTargetRadius; //offset = 112, size = 4
		Float LastTargetHeight; //offset = 116, size = 4
		Vector LastCamLoc; //offset = 120, size = 12
		Rotator DebugAdhesion_Smoothed; //offset = 132, size = 12
		Rotator DebugAdhesion_Final; //offset = 144, size = 12
		Quat DebugAdhesion_Combined; //offset = 156, size = 16
		Quat DebugAdhesion_PerfectAim; //offset = 172, size = 16
		Quat DebugAdhesion_StrafeAssist; //offset = 188, size = 16
		Pawn* LastAdhesionTarget; //offset = 204, size = 4
		Pawn* LastFrictionTarget; //offset = 208, size = 4
		Vector ZoomSnapTarget; //offset = 212, size = 12
		Actor* LastZoomSnapTarget; //offset = 224, size = 4
		Float AdhesionSmoothRate; //offset = 228, size = 4
		Quat AdhesionSmoothRot; //offset = 232, size = 16
		Float FrictionSmoothValue; //offset = 248, size = 4
		Float FrictionSmoothRate; //offset = 252, size = 4
		Actor* CurrentAimAssistTarget; //offset = 256, size = 4
		Vector CurrentAimAssistBoneLocation; //offset = 260, size = 12
		Float CurrentAimAssistSoftMargin; //offset = 272, size = 4

		void DebugDraw_ZoomSnap( BioHUD* H, SFXWeapon* Weapon, LocalEnemy ChkEnemy, BioPawn* ChkPawn, ZoomSnapInfo Info, Float XL, Float YL, Float Angle, Vector CamLoc, Vector HitLoc, Vector HitNorm, Rotator CamRot, TraceHitInfo Hit, Float CircleSize, Vector ScreenCoords, Vector BoneLoc );
		void ZoomSnap( SFXWeapon* Weapon, Float Dist, Float MaxHeightOffset, Float HeightOffset, Vector Proj, Vector Offset, SFXPlayerCamera* Cam );
		void DebugDraw_Adhesion( BioHUD* H, Vector XAxis, Vector YAxis, Vector ZAxis, Vector Dir, Vector TargLoc, Int X, Int Y, Vector CamLoc, Rotator CamRot );
		String PrintQuat( Quat Q );
		Bool ViewAdhesion( Float DeltaTime, SFXWeapon* Weapon, Rotator out_ViewRotation, Pawn* AdhesionTarget, LocalEnemy ChkEnemy, Bool bTargetVisible, Float DistToTarget, Float AdhesionRot, Float LookMag, Float MoveMag, Float Decay, Vector CamLoc, Vector TargetLoc, Vector CamToTarget, Vector YLoc, Vector FutureCamLoc, Vector FutureTargetLoc, Vector Correction, Rotator CamRot, Rotator DeltaRot, Rotator NewRotation, Quat PerfectAimRotation, Quat StrafeAssistRotation, Quat Combined, Float CorrectionFactor );
		void DebugDraw_Friction( BioHUD* H, Vector XAxis, Vector YAxis, Vector ZAxis, Vector TargLoc, Int X, Int Y, AimAssistBox AimBox );
		void ViewFriction( Float DeltaTime, SFXWeapon* Weapon, BioPawn* FrictionTarget, Vector CamLoc, Vector X, Vector Y, Vector Z, Rotator CamRot, Float FrictionMultiplier );
		Rotator GetAdjustedAimFor( Weapon* W, Vector StartFireLoc, SFXWeapon* SW, Rotator BaseAimRot );
		Rotator GetMagneticAimCorrection( Vector StartFireLoc, Rotator BaseAimRot, Float MaxAngle, Float Threshold, Float Range, BioPawn* HitPawn, Rotator PerfectAimRot, Rotator AdjustedAimRot, Float CosCorrection, Float CorrectionRads, Float InterpAmount, Float FinalAimCorrectionFactor );
		void UpdateViewRotationForAdhesion( Float DeltaTime, Rotator ViewRotation, SFXWeapon* Weapon );
		void CacheCurrentAimAssistTarget( SFXWeapon* SW, Vector CamLoc, Rotator CamRot );
	};

	class SFXWeapon_SniperRifle_Base: public SFXWeapon
	{
		DECLARE_PACKAGE_CLASS( SFXWeapon_SniperRifle_Base, SFXWeapon, SFXGame )

	public:

		void ModifyDamage( Float BaseDamage, Vector HitLocation, Actor* HitActor );
	};

	class SFXWeapon_Shotgun_Base: public SFXWeapon
	{
		DECLARE_PACKAGE_CLASS( SFXWeapon_Shotgun_Base, SFXWeapon, SFXGame )

	public:

		void ScaleWeapon( Int Level );
		void ModifyDamage( Float BaseDamage, Vector HitLocation, Actor* HitActor );
	};

	class BioHoloTerrain: public Terrain
	{
		DECLARE_PACKAGE_CLASS( BioHoloTerrain, Terrain, SFXGame )

	public:
	};

	class BioInterface_Appearance_Car: public BioInterface_Appearance
	{
		DECLARE_PACKAGE_CLASS( BioInterface_Appearance_Car, BioInterface_Appearance, SFXGame )

	public:
	};

	class BioMaterialOverrideSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioMaterialOverrideSaveObject, BioBaseSaveObject, SFXGame )

	public:

		Array<TextureParameter> m_aTextureOverrides; //offset = 72, size = 12
		Array<ColorParameter> m_aColorOverrides; //offset = 84, size = 12
		Array<ScalarParameter> m_aScalarOverrides; //offset = 96, size = 12

		void LoadObject( Object* O, Int I, BioMaterialOverride* Material );
		void SaveObject( Object* O, Int I, BioMaterialOverride* Material );
	};

	class BioItemSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioItemSaveObject, BioBaseSaveObject, SFXGame )

	public:
	};

	class BioItemWeaponRanged: public Object
	{
		DECLARE_PACKAGE_CLASS( BioItemWeaponRanged, Object, SFXGame )

	public:
	};

	class BioLedgeMeshActor: public StaticMeshActor
	{
		DECLARE_PACKAGE_CLASS( BioLedgeMeshActor, StaticMeshActor, SFXGame )

	public:
	};

	struct NewPowerInfo
	{
		Class* PowerClass; //offset = 0, size = 4
		Float CurrentRank; //offset = 4, size = 4
		Int WheelDisplayIndex; //offset = 8, size = 4
	};

	class SFXPowerLevelUpHelper: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXPowerLevelUpHelper, Object, SFXGame )

	public:

		BioWorldInfo* m_WorldInfo; //offset = 60, size = 4
		BioPawn* m_Pawn; //offset = 64, size = 4
		Array<SFXPower*> m_powers; //offset = 68, size = 12
		Array<NewPowerInfo> m_UpdatedPowers; //offset = 80, size = 12
		Int m_nPointsSpent; //offset = 92, size = 4

		Bool CanMakePurchase(, Int nIndex, Int nCostToIncrease, Bool bCanMakePurchase );
		Int GetNextWheelDisplayIndex(, Array<SFXPower*> aWheelPowers );
		Float GetCurrentRankByPower( SFXPower* Power, Int nPowerIndex );
		Float GetCurrentRank( Int nPowerIndex );
		void CancelEvolution( SFXPower* OriginalPower, Int nIndex );
		void EvolvePower( SFXPower* OriginalPower, Class* EvolvedPowerClass, SFXPower* EvolvedPower, SFXPower* PowerInList, Int nIndex, BioPlayerController* PlayerController, BioPlayerInput* PlayerInput, String sUnlockBlurb, Int nNewPowerIndex, Int nOldPowerIndex );
		void CancelChanges( Int nIndex );
		void ApplyChanges( Int nIndex, BioPowerScript* PowerScript );
		Bool CanEvolvePower( Int nPowerIndex );
		Bool IsUnlocked( Int nPowerIndex, SFXPower* Power, Int nRequiredIndex, Int nIndex, Class* RequiredPowerClass, Bool bFound );
		Int GetAvailableRank( Int nPowerIndex, SFXPower* Power );
		Int GetRemainingPoints();
		Bool CanIncreaseRank( Int nPowerIndex, Int nCostToIncrease, SFXPower* Power, Int nNextRank, Int nRemainingPoints );
		Bool IncreaseRank( Int nPowerIndex, Int nCostToIncrease, Int nRankIndex, String sUnlockBlurb );
		void AutoLevelUp( SFXLoadoutData* Loadout, Int nLevelUpIndex, Int nIndex );
		Bool SetPawn( BioPawn* Pawn, Int nIndex );
		Bool Initialize( BioWorldInfo* WorldInfo );
	};

	class BioLookAtTarget: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioLookAtTarget, Actor, SFXGame )

	public:

		Float m_fDelay; //offset = 508, size = 4
		Float m_fConeDeg; //offset = 512, size = 4
		Float m_fMinDistance; //offset = 516, size = 4
		Float m_fCODelayRemaining; //offset = 520, size = 4
		Float m_fNCODelayRemaining; //offset = 524, size = 4
		Float m_fConeCos; //offset = 528, size = 4
		Bool m_bCOSeen: 1; //offset = 532, size = 4
		Bool m_bNCOSeen: 1; //offset = 532, size = 4
	};

	struct VertexBuffer
	{
		Array<Vector> m_vPosition; //offset = 0, size = 12
	};

	class BioMorphFaceSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioMorphFaceSaveObject, BioBaseSaveObject, SFXGame )

	public:

		SkeletalMesh* m_oBaseHead; //offset = 72, size = 4
		SkeletalMesh* m_oHairMesh; //offset = 76, size = 4
		Array<SkeletalMesh*> m_oOtherMeshes; //offset = 80, size = 12
		Array<MorphFeature> m_aMorphFeatures; //offset = 92, size = 12
		BioBaseSaveObject* m_oMaterialOverrides; //offset = 104, size = 4
		Array<OffsetBonePos> m_aFinalSkeleton; //offset = 108, size = 12
		VertexBuffer m_aVertexBuffersLOD0; //offset = 120, size = 12
		VertexBuffer m_aVertexBuffersLOD1; //offset = 132, size = 12
		VertexBuffer m_aVertexBuffersLOD2; //offset = 144, size = 12
		VertexBuffer m_aVertexBuffersLOD3; //offset = 156, size = 12

		void LoadObject( Object* O, Int I, Int J, BioMorphFace* Morph );
		void SaveObject( Object* O, Int I, Int J, BioMorphFace* Morph );
	};

	class BioMountFallVolume: public Volume
	{
		DECLARE_PACKAGE_CLASS( BioMountFallVolume, Volume, SFXGame )

	public:
	};

	enum EBioOp
	{
		BIO_OP_NULL,
		BIO_OP_ADD,
		BIO_OP_MULTIPLY,
		BIO_OP_MULTIPLY_COMPLEMENT,
	};

	class BioOp: public Object
	{
		DECLARE_PACKAGE_CLASS( BioOp, Object, SFXGame )

	public:

		void EvaluateInt( Int nA, Byte eOp, Int nB, Bool bInvertOp, Int nU );
		void EvaluateFloat( Float fA, Byte eOp, Float fB, Bool bInvertOp, Float fU );
	};

	class BioPartyInfo: public Object
	{
		DECLARE_PACKAGE_CLASS( BioPartyInfo, Object, SFXGame )

	public:
	};

	class BioSeqEvt_WaypointSet_WaypointReached: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_WaypointSet_WaypointReached, SequenceEvent, SFXGame )

	public:
	};

	class BioPathPointFactory: public ActorFactory
	{
		DECLARE_PACKAGE_CLASS( BioPathPointFactory, ActorFactory, SFXGame )

	public:
	};

	class SFXPower_PassivePower: public SFXPower
	{
		DECLARE_PACKAGE_CLASS( SFXPower_PassivePower, SFXPower, SFXGame )

	public:

		Array<Float> CharmIntimidateModifier; //offset = 332, size = 12

		Float GetNegotiationBonus(, SFXModule_GameEffectManager* Manager );
		void ModifyIntimidateSkill( Float fIntimidateSkill, Int nRankToUse, Float Modifier );
		void ModifyCharmSkill( Float fCharmSkill, Int nRankToUse, Float Modifier );
	};

	class BioSeqEvt_PawnPhysicsChange: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_PawnPhysicsChange, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_Pawn_WaypointReached: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_Pawn_WaypointReached, SequenceEvent, SFXGame )

	public:

		BioPathPoint* m_oPathPointTrigger; //offset = 280, size = 4
	};

	class SFXPhysicalMaterialBase: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXPhysicalMaterialBase, Object, SFXGame )

	public:
	};

	class SFXPhysicalMaterialFootSteps: public SFXPhysicalMaterialBase
	{
		DECLARE_PACKAGE_CLASS( SFXPhysicalMaterialFootSteps, SFXPhysicalMaterialBase, SFXGame )

	public:

		WwiseEvent* HHWalkingSound; //offset = 60, size = 4
		WwiseEvent* HHRunningSound; //offset = 64, size = 4
		WwiseEvent* WalkingSound; //offset = 68, size = 4
		WwiseEvent* RunningSound; //offset = 72, size = 4
		WwiseEvent* HLWalkingSound; //offset = 76, size = 4
		WwiseEvent* HLRunningSound; //offset = 80, size = 4
		WwiseEvent* RHWalkingSound; //offset = 84, size = 4
		WwiseEvent* RHRunningSound; //offset = 88, size = 4
		WwiseEvent* RMWalkingSound; //offset = 92, size = 4
		WwiseEvent* RMRunningSound; //offset = 96, size = 4
		WwiseEvent* RLWalkingSound; //offset = 100, size = 4
		WwiseEvent* RLRunningSound; //offset = 104, size = 4
		WwiseEvent* HuskWalkingSound; //offset = 108, size = 4
		WwiseEvent* HuskRunningSound; //offset = 112, size = 4
		WwiseEvent* CollectorWalkingSound; //offset = 116, size = 4
		WwiseEvent* CollectorRunningSound; //offset = 120, size = 4
		WwiseEvent* OtherWalkingSound; //offset = 124, size = 4
		WwiseEvent* OtherRunningSound; //offset = 128, size = 4
		WwiseEvent* Landing; //offset = 132, size = 4
		WwiseEvent* Leaping; //offset = 136, size = 4
		ParticleSystem* FootstepWalk; //offset = 140, size = 4
		ParticleSystem* FootstepRun; //offset = 144, size = 4
		WwiseEvent* TireSound; //offset = 148, size = 4
	};

	class SFXPhysicalMaterialProperty: public PhysicalMaterialPropertyBase
	{
		DECLARE_PACKAGE_CLASS( SFXPhysicalMaterialProperty, PhysicalMaterialPropertyBase, SFXGame )

	public:

		SFXPhysicalMaterialDecals* PhysicalMaterialDecals; //offset = 60, size = 4
		SFXPhysicalMaterialImpactEffects* PhysicalMaterialImpactEffects; //offset = 64, size = 4
		SFXPhysicalMaterialImpactSounds* PhysicalMaterialImpactSounds; //offset = 68, size = 4
		SFXPhysicalMaterialFootSteps* PhysicalMaterialFootSteps; //offset = 72, size = 4
		SFXPhysicalMaterialPhysics* PhysicalMaterialPhysics; //offset = 76, size = 4
	};

	class SFXGameEffect_DeathEffect: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_DeathEffect, SFXGameEffect, SFXGame )

	public:

		BioVFXTemplate* DeathEffect; //offset = 104, size = 4
		WwiseEvent* DeathSoundEffect; //offset = 108, size = 4
		Int Priority; //offset = 112, size = 4
	};

	class SFXPawn_PlayerSoldier: public SFXPawn_Player
	{
		DECLARE_PACKAGE_CLASS( SFXPawn_PlayerSoldier, SFXPawn_Player, SFXGame )

	public:
	};

	class SFXPawn_PlayerEngineer: public SFXPawn_Player
	{
		DECLARE_PACKAGE_CLASS( SFXPawn_PlayerEngineer, SFXPawn_Player, SFXGame )

	public:
	};

	class SFXPawn_PlayerAdept: public SFXPawn_Player
	{
		DECLARE_PACKAGE_CLASS( SFXPawn_PlayerAdept, SFXPawn_Player, SFXGame )

	public:
	};

	class SFXPawn_PlayerInfiltrator: public SFXPawn_Player
	{
		DECLARE_PACKAGE_CLASS( SFXPawn_PlayerInfiltrator, SFXPawn_Player, SFXGame )

	public:
	};

	class SFXPawn_PlayerSentinel: public SFXPawn_Player
	{
		DECLARE_PACKAGE_CLASS( SFXPawn_PlayerSentinel, SFXPawn_Player, SFXGame )

	public:
	};

	class SFXPawn_PlayerVanguard: public SFXPawn_Player
	{
		DECLARE_PACKAGE_CLASS( SFXPawn_PlayerVanguard, SFXPawn_Player, SFXGame )

	public:
	};

	class SFXArmor_Heavy: public SFXArmor_Base
	{
		DECLARE_PACKAGE_CLASS( SFXArmor_Heavy, SFXArmor_Base, SFXGame )

	public:
	};

	class SFXGameEffect_Regeneration: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Regeneration, SFXGameEffect, SFXGame )

	public:

		void OnUpdate( Float DeltaSeconds, SFXModule_Damage* DmgModule, Float RegenAmount );
		void ComputeEffectValue( Float Value );
	};


	class SFXAI_None: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_None, SFXAI_Core, SFXGame )

	public:
		struct AI_None
		{
		};

		void SwitchWeapon( SFXWeapon* oWpn );
		void MoveToGoalExternal( Actor* NewMoveGoal, Float NewMoveOffset, MoveDelegate MoveDelegate );
		void FireWeaponAtTarget( Actor* oTarget, Bool bCheckLOS, FireDelegate FireDelegate );
		void UsePowerOnTarget( Name nmPowerToUse, Actor* oTarget, PowerDelegate PowerDelegate, Bool bIgnoreSuppression );
		void SetTarget( Actor* oTarget );
	};

	class BioPawnSaveObject: public BioActorSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioPawnSaveObject, BioActorSaveObject, SFXGame )

	public:

		Bool m_bHeadGearVisiblePreference: 1; //offset = 124, size = 4

		void LoadObject( Object* pObject, BioPawn* pPawn );
		void SaveObject( Object* pObject, BioPawn* pPawn );
	};

	class BioSeqEvt_PowerCooldownFinished: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_PowerCooldownFinished, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_PowerEffectDurationComplete: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_PowerEffectDurationComplete, SequenceEvent, SFXGame )

	public:
	};

	class SFXSeqEvt_CastPower: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_CastPower, SequenceEvent, SFXGame )

	public:
	};

	class SFXSeqEvt_OrderedPower: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_OrderedPower, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_NotifyLimbDetached: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_NotifyLimbDetached, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqAct_OrbitalGame: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_OrbitalGame, SeqAct_Latent, SFXGame )

	public:

		InterpActor* Planet; //offset = 256, size = 4
		InterpActor* Clouds; //offset = 260, size = 4
		InterpActor* Probe; //offset = 264, size = 4
		InterpActor* Ring; //offset = 268, size = 4
		InterpActor* ScanSphere; //offset = 272, size = 4
		Emitter* ProbeTrail; //offset = 276, size = 4
		ParticleSystem* LandingSiteMarker; //offset = 280, size = 4
		ParticleSystem* Reticle; //offset = 284, size = 4
		ParticleSystem* ScanReticle; //offset = 288, size = 4
		ParticleSystem* LaunchReticle; //offset = 292, size = 4
		ParticleSystem* LandReticleIndicator; //offset = 296, size = 4
		ParticleSystem* ScanWipe; //offset = 300, size = 4
		ParticleSystem* ScanDirection; //offset = 304, size = 4
		ParticleSystem* ScanBlip; //offset = 308, size = 4
		ParticleSystem* ProbeImpact; //offset = 312, size = 4
		ParticleSystem* ProbeLocationMarker; //offset = 316, size = 4
		Array<WwiseBaseSoundObject*> MineralStartEvents; //offset = 320, size = 12
		Array<WwiseBaseSoundObject*> MineralStopEvents; //offset = 332, size = 12
		Array<String> MineralRTPCNames; //offset = 344, size = 12
		WwiseBaseSoundObject* ProbeImpactSound; //offset = 356, size = 4
		WwiseBaseSoundObject* MineralRecoverySound_None; //offset = 360, size = 4
		WwiseBaseSoundObject* MineralRecoverySound_Small; //offset = 364, size = 4
		WwiseBaseSoundObject* MineralRecoverySound_Medium; //offset = 368, size = 4
		WwiseBaseSoundObject* MineralRecoverySound_Large; //offset = 372, size = 4
		WwiseBaseSoundObject* ProbeLaunchSound_NoProbes; //offset = 376, size = 4
		WwiseBaseSoundObject* LandingSiteIndicator; //offset = 380, size = 4
		String LandingSiteIndicator_RTPCName; //offset = 384, size = 12
		Array<WwiseBaseSoundObject*> AnomalyDetectedVO; //offset = 396, size = 12
		Array<WwiseBaseSoundObject*> ProbeLaunchedVO; //offset = 408, size = 12
		WwiseBaseSoundObject* AnomalyStaticStart; //offset = 420, size = 4
		WwiseBaseSoundObject* AnomalyStaticStop; //offset = 424, size = 4
		Rotator ReticleRotStart; //offset = 428, size = 12
		Rotator ReticleRotMaxClamp; //offset = 440, size = 12
		Rotator ReticleRotMinClamp; //offset = 452, size = 12
		BioPlanet* CurrentPlanet; //offset = 464, size = 4
		InterpActor* RingReticle; //offset = 468, size = 4
		MaterialInstanceConstant* ReticleMaterial; //offset = 472, size = 4
		MaterialInstanceConstant* ScanReticleMaterial; //offset = 476, size = 4
		InterpActor* ScanIndicator; //offset = 480, size = 4
		Array<InterpActor*> ScanIndicatorArray; //offset = 484, size = 12
		Array<InterpActor*> RingReticleSpinners; //offset = 496, size = 12
		InterpActor* ScanBeam; //offset = 508, size = 4
		InterpActor* ReticleBlinker; //offset = 512, size = 4

		BioCameraBehaviorGalaxy* GetGalaxyCamera();
		void SignalProbeImpact();
		void SignalProbeLaunch();
		void EndAction();
		Bool Update( Float DeltaTime, BioPlayerController* PC, SFXGameModeOrbital* GameMode );
		void Activated( BioCameraBehaviorGalaxy* GalaxyCam, Int nCluster, Int nSystem, Int nPlanet, BioPlayerController* PC, SFXGameModeOrbital* GameMode );
	};

	class SFXCustomAction_DamageReaction: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_DamageReaction, BioCustomAction, SFXGame )

	public:

		BodyStance BS_Reaction; //offset = 108, size = 12
		BodyStance BS_ReactionExplore; //offset = 120, size = 12
		Float fAnimPlayRate; //offset = 132, size = 4
		Float fAnimBlendInTime; //offset = 136, size = 4
		Float fAnimBlendOutTime; //offset = 140, size = 4
		Float fAnimStartTime; //offset = 144, size = 4
		Bool bAnimLooping: 1; //offset = 148, size = 4
		Bool bAllowAnimInterrupt: 1; //offset = 148, size = 4
		Bool bRagdollOnFinish: 1; //offset = 148, size = 4
		Bool bRotateOnHit: 1; //offset = 148, size = 4
		Float fReactionDuration; //offset = 152, size = 4
		Byte ERootMotionMode; //offset = 156, size = 1
		Float RotationTime; //offset = 160, size = 4
		Float ImpactScale; //offset = 164, size = 4
		ParticleSystem* PS_Impact; //offset = 168, size = 4
		Controller* Instigator; //offset = 172, size = 4

		void ActivateImpactEmitter( Vector HitLocation, Vector HitNormal, TraceHitInfo HitInfo, SFXObjectPool* Pool, ParticleSystemComponent* ImpactPSC );
		void EndThisCustomAction();
		void CheckForRagdollRecovery();
		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void OnCustomActionTimeUp();
		void StartCustomAction();
		void Init( Vector HitLocation, Vector HitNormal, TraceHitInfo HitInfo, Bool bPlayImpact, Controller* Inst );
	};

	class BioPawnDamageComponent: public BioDamageComponent
	{
		DECLARE_PACKAGE_CLASS( BioPawnDamageComponent, BioDamageComponent, SFXGame )

	public:
	};

	class BioPawnSquadInterface: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioPawnSquadInterface, BioBaseComponent, SFXGame )

	public:
	};

	class SFXSeqEvt_ExceededPhysicsThreshold: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_ExceededPhysicsThreshold, SequenceEvent, SFXGame )

	public:
	};

	class SFXPhysicalMaterialPhysics: public SFXPhysicalMaterialBase
	{
		DECLARE_PACKAGE_CLASS( SFXPhysicalMaterialPhysics, SFXPhysicalMaterialBase, SFXGame )

	public:

		WwiseEvent* Sound; //offset = 60, size = 4
		Int WwiseType; //offset = 64, size = 4
	};

	class SFXGameModeGalaxy: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeGalaxy, SFXGameModeBase, SFXGame )

	public:

		BioCameraBehaviorGalaxy* GalaxyCam; //offset = 92, size = 4
		SFXCameraTransition_GalaxyMap* InstantTransition; //offset = 96, size = 4
		Float DeadZone; //offset = 100, size = 4

		void TabLeft( BioSFPanel* oPanel, Array<ASParams> lstParams, BioWorldInfo* oWorldInfo );
		void TabRight( BioSFPanel* oPanel, Array<ASParams> lstParams, BioWorldInfo* oWorldInfo );
		void StopFuel( SFXInventoryManager* oInventory );
		void StartFuel( SFXInventoryManager* oInventory );
		void BuyFuel( SFXInventoryManager* oInventory, Float fPreviousFuel );
		void BuyProbes( SFXInventoryManager* oInventory );
		void BeginExitGalaxyMap( Bool resize );
		Bool CanExit();
		SFXCameraMode* HACK_GetCameraMode();
		SFXCameraMode* GetCameraMode( SFXCameraMode* OldCameraMode, Int PreserveTarget, Float TransitionTime, SFXCameraMode_Interpolate* Transition );
		void Initialize();
	};

	class SFXGameModeOrbital: public SFXGameModeGalaxy
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeOrbital, SFXGameModeGalaxy, SFXGame )

	public:

		Rotator ReticleRot; //offset = 104, size = 12
		Rotator ReticleRotMaxClamp; //offset = 116, size = 12
		Rotator ReticleRotMinClamp; //offset = 128, size = 12
		Float PlanetRotationSpeed; //offset = 140, size = 4
		Float ScanPlanetRotationSpeed; //offset = 144, size = 4
		Float ReticleMoveSpeed; //offset = 148, size = 4
		Float ScanReticleMoveSpeed; //offset = 152, size = 4
		Float MoveDist; //offset = 156, size = 4
		Float ProbeControlAxisOffset; //offset = 160, size = 4
		Float ProbeControlTargetOffset; //offset = 164, size = 4
		Bool Scanning: 1; //offset = 168, size = 4
		Float ScannerRotateSpeed; //offset = 172, size = 4
		Float ProbeLaunchTime; //offset = 176, size = 4
		Float ProbeLaunchTimeMax; //offset = 180, size = 4
		Float ScanDist; //offset = 184, size = 4
		ParticleSystemComponent* ReticleEffect; //offset = 188, size = 4
		ParticleSystemComponent* ScanReticleEffect; //offset = 192, size = 4
		ParticleSystemComponent* ScanWipeEffect; //offset = 196, size = 4
		ParticleSystemComponent* ScanBlipEffect; //offset = 200, size = 4
		ParticleSystemComponent* ScanDirectionEffect; //offset = 204, size = 4
		ParticleSystemComponent* LaunchReticleEffect; //offset = 208, size = 4
		ParticleSystemComponent* ProbeExplosionEffect; //offset = 212, size = 4
		Bool ProbeActive: 1; //offset = 216, size = 4
		Bool bRescaling: 1; //offset = 216, size = 4
		Bool bExiting: 1; //offset = 216, size = 4
		Bool ImpactActive: 1; //offset = 216, size = 4
		Bool DrawProbeDebugLines: 1; //offset = 216, size = 4
		Bool bMouseLock: 1; //offset = 216, size = 4
		Vector ProbeLaunchLocation; //offset = 220, size = 12
		Vector ProbeTargetLocation; //offset = 232, size = 12
		Vector ProbeControlPtLocation; //offset = 244, size = 12
		Float ReticleScale; //offset = 256, size = 4
		Float Roll; //offset = 260, size = 4
		Float fRescaleTime; //offset = 264, size = 4
		Float fInitialScale; //offset = 268, size = 4
		Float fNewScale; //offset = 272, size = 4
		Float fMaxRescaleTime; //offset = 276, size = 4
		Float ImpactTime; //offset = 280, size = 4
		Float ImpactTimeMax; //offset = 284, size = 4
		ForceFeedbackWaveform* ResourceFFWaveForm; //offset = 288, size = 4
		ScreenShakeStruct Shake; //offset = 292, size = 112
		ScreenShakeStruct BigShake; //offset = 404, size = 112
		Float fSpectrographUpdateTime; //offset = 516, size = 4
		Float fSpectrographUpdateDelay; //offset = 520, size = 4
		Float fResourceRetrievalFactor; //offset = 524, size = 4
		WwiseAudioComponent* AudioComponent; //offset = 528, size = 4
		Float fResourceTimer; //offset = 532, size = 4
		Array<ParticleSystemComponent*> TemporaryComponents; //offset = 536, size = 12

		void setshakelfreq( Float X, Float Y, Float Z );
		void setshakelamp( Float X, Float Y, Float Z );
		void setshakerfreq( Float X, Float Y, Float Z );
		void setshakeramp( Float X, Float Y, Float Z );
		void setshaket( Float T );
		void SetResourceRetrievalFactor( Float F );
		void ToggleProbeDebug();
		void SetProbeTime( Float T );
		void SetProbeControl( Float A, Float T );
		void SetReticleScale( Float Scale );
		void SetPlanetRotateSpeed( Float Speed );
		void SetScanRotateSpeed( Float Speed );
		void SetScanSpeed( Float Speed );
		void SetReticleRotMaxClamp( Float P, Float Y, Float R );
		void SetReticleRotMinClamp( Float P, Float Y, Float R );
		void SetScanDist( Float A );
		void GiveResource( Byte FeatureType, Byte MineralType, Int Amount, BioPlayerController* oController, SFXInventoryManager* oInventory, Int nCurrentAmount, Byte InvType, BioSFPanel* oPanel, BioSFHandler_GalaxyMap* oHandler );
		void RingReticleUpDown( Float Axis );
		void RingReticleLeftRight( Float Axis, Rotator Rot );
		Float GetScannerSpeedUpgradeFactor();
		void UpdateReticle( Rotator Rot, Vector ReticlePos );
		void PlanetLeftRight( Float Axis, InterpActor* P, Rotator Rot );
		void LaunchProbe( SFXInventoryManager* oInventory, Vector axisOffset, Vector TargetOffset, BioWorldInfo* oWorldInfo, BioPlayerController* oController );
		void EndImpact( SFXPlanetFeature* F, Vector pos, InterpActor* Planet, Float fDist, Int nRetrievedAmount, Int nLargestRetrievedAmount, Byte RetrievedType, BioWorldInfo* WorldInfo, Bool bMiningSuccessful, BioPlayerController* PC, Bool RevealLandingSite );
		void ShowProbeImpactVFX( BioPlanet* PlanetData, Vector pos, InterpActor* Planet, ParticleSystemComponent* Particle );
		void ProbeImpact( Rotator Rot, InterpActor* Planet );
		void StopScanning( Int I, SFXPlanetFeature* F );
		void StartScanning( Int I, BioWorldInfo* oWorldInfo, BioPlayerController* oController );
		void SetButtonLabel( String sButton, nText nText, BioSFPanel* oPanel, ASParams stParam, Array<ASParams> lstParams, BioWorldInfo* oWorldInfo );
		void SetLTriggerLabelVisible( Bool bShow, BioSFPanel* oPanel, ASParams stParam, Array<ASParams> lstParams );
		void SetRTriggerLabelVisible( Bool bShow, BioSFPanel* oPanel, ASParams stParam, Array<ASParams> lstParams );
		void UpdateProbeHudElement( Int nProbes, BioSFPanel* oPanel, ASParams stParam, Array<ASParams> lstParams );
		void ToggleMouseLock( Bool bNewMouseLock, BioSFPanel* oPanel, BioSFHandler_GalaxyMap* oHandler );
		void StopFeatureSounds( SFXPlanetFeature* F );
		void StartFeatureSounds( SFXPlanetFeature* F, BioWorldInfo* WorldInfo, Bool LandingSite );
		Vector GetRelativeReticlePosition(, Vector V, Float PlanetSize );
		void UpdateAnomalyIndicator( Vector toLanding, Float DeltaTime, Bool flashIndicator, Rotator Rot, Vector Dir, Float Angle, InterpActor* P, Float lastRoll, Bool wrapped );
		void ShowHUDAnomalyIndicator( BioSFPanel* oPanel, Array<ASParams> lstParams );
		void ScanResources( Float DeltaTime, InterpActor* P, SFXPlanetFeature* F, Float fDist, Vector pos, Vector scanPos, Array<Float> Resources, BioSFPanel* oPanel, BioSFHandler_GalaxyMap* oHandler, BioWorldInfo* WorldInfo, Int I, Vector toLanding, Float distToLanding );
		Int ScannedResourceAmount( Float fDistTo, Int ResourceAmount );
		void Update( Float DeltaTime, Vector oldPos, Vector NewPos, InterpActor* Probe, Float T, BioSFPanel* oPanel, Rotator planetRot );
		void UpdatePlanetScale( Float DeltaTime, InterpActor* oPlanet, Vector vNewScale, Vector vNewRingScale );
		void ResetProbe( InterpActor* Probe );
		Bool CanExit();
		BioSeqAct_OrbitalGame* GetGameData(, SeqAct_Latent* SeqAct );
		void BeginExitGalaxyMap( Bool resize );
		void Deactivated( Int I, BioPlayerController* oController, BioWorldInfo* oWorldInfo );
		void UpdatePlanetRichness( BioSFPanel* oPanel, ASParams stParam, Array<ASParams> lstParams, BioWorldInfo* oWorldInfo, nRichnessStrref nRichnessStrref, Int nNumOver2000, Int nNumOver1500, Int nNumOver750, Int nNumOver350, SFXPlanetFeature* F );
		void Activated( BioPlayerController* oController, SFXInventoryManager* oInventory, BioSFPanel* oPanel, ASParams stParam, Array<ASParams> lstParams, InterpActor* oPlanet, BioWorldInfo* oWorldInfo );
		SFXCameraMode* GetCameraMode( SFXCameraMode* OldCameraMode, Int PreserveTarget, Float TransitionTime, SFXCameraMode_Interpolate* Transition );
	};

	class SFXSeqEvt_Tutorial: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_Tutorial, SequenceEvent, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialReload: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialReload, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialMelee: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialMelee, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialZoom: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialZoom, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialQuickCast: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialQuickCast, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialWeaponSwitch: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialWeaponSwitch, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialStorm: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialStorm, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialOrderHenchman: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialOrderHenchman, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialWheelHidden: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialWheelHidden, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXSeqEvt_TutorialAreaMapHidden: public SFXSeqEvt_Tutorial
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_TutorialAreaMapHidden, SFXSeqEvt_Tutorial, SFXGame )

	public:
	};

	class SFXDifficulty_Level1: public SFXDifficulty
	{
		DECLARE_PACKAGE_CLASS( SFXDifficulty_Level1, SFXDifficulty, SFXGame )

	public:
	};

	class SFXDifficulty_Level3: public SFXDifficulty
	{
		DECLARE_PACKAGE_CLASS( SFXDifficulty_Level3, SFXDifficulty, SFXGame )

	public:
	};

	class SFXDifficulty_Level4: public SFXDifficulty
	{
		DECLARE_PACKAGE_CLASS( SFXDifficulty_Level4, SFXDifficulty, SFXGame )

	public:
	};

	class SFXDifficulty_Level5: public SFXDifficulty
	{
		DECLARE_PACKAGE_CLASS( SFXDifficulty_Level5, SFXDifficulty, SFXGame )

	public:
	};

	class SFXDifficulty_Level6: public SFXDifficulty
	{
		DECLARE_PACKAGE_CLASS( SFXDifficulty_Level6, SFXDifficulty, SFXGame )

	public:
	};

	class SFXDifficulty_Level2: public SFXDifficulty
	{
		DECLARE_PACKAGE_CLASS( SFXDifficulty_Level2, SFXDifficulty, SFXGame )

	public:
	};

	class BioPlayerReplicationInfo: public PlayerReplicationInfo
	{
		DECLARE_PACKAGE_CLASS( BioPlayerReplicationInfo, PlayerReplicationInfo, SFXGame )

	public:
	};

	class BioSquadSaveObject: public BioBaseSquadSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioSquadSaveObject, BioBaseSquadSaveObject, SFXGame )

	public:

		Int m_nSquadExperience; //offset = 72, size = 4
		Int m_nMaxLevel; //offset = 76, size = 4
		Int m_nMinLevel; //offset = 80, size = 4
		Int m_nSquadLevel; //offset = 84, size = 4
	};

	class BioSeqEvt_OnCombatBegin: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnCombatBegin, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_OnCombatEnd: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnCombatEnd, SequenceEvent, SFXGame )

	public:
	};

	class BioPlayerVehicleSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioPlayerVehicleSaveObject, BioBaseSaveObject, SFXGame )

	public:

		String m_ActorType; //offset = 72, size = 12
		Bool m_bPowertrainEnabled: 1; //offset = 84, size = 4
		Bool m_bVehicleFunctionEnabled: 1; //offset = 84, size = 4

		void LoadObject( Object* O, BioVehicleBehaviorBase* Behavior );
		void SaveObject( Object* O, BioVehicleBehaviorBase* Behavior );
	};

	class BioPlaypenVolumeAdditive: public BioPlaypenVolume
	{
		DECLARE_PACKAGE_CLASS( BioPlaypenVolumeAdditive, BioPlaypenVolume, SFXGame )

	public:

		void UnTouch( Actor* Other, BioPawn* Pawn, BioAiController* Controller );
		void Touch( Actor* Other, PrimitiveComponent* OtherComp, Vector HitLocation, Vector HitNormal, BioPawn* Pawn, BioAiController* Controller, Int I, Bool bPreviouslyInPlaypen, BioPlaypenVolume* oPlaypen );
	};

	class BioPlaypenVolumeSubtractive: public BioPlaypenVolume
	{
		DECLARE_PACKAGE_CLASS( BioPlaypenVolumeSubtractive, BioPlaypenVolume, SFXGame )

	public:

		void UnTouch( Actor* Other, BioPawn* Pawn, BioAiController* Controller );
		void Touch( Actor* Other, PrimitiveComponent* OtherComp, Vector HitLocation, Vector HitNormal, BioPawn* Pawn, BioAiController* Controller );
	};

	class SFXShield_Energy: public SFXShield_Base
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Energy, SFXShield_Base, SFXGame )

	public:
	};

	class SFXShield_Biotic: public SFXShield_Base
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Biotic, SFXShield_Base, SFXGame )

	public:
	};

	class SFXShield_Armour: public SFXShield_Base
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Armour, SFXShield_Base, SFXGame )

	public:
	};

	class SFXEmitter: public Emitter
	{
		DECLARE_PACKAGE_CLASS( SFXEmitter, Emitter, SFXGame )

	public:

		Bool bPooled: 1; //offset = 516, size = 4

		void SetLifeTime( Float Seconds );
		void OnParticleSystemFinished( ParticleSystemComponent* FinishedComponent );
		void Reuse();
		void Initialize( ParticleSystem* Template, Int idx );
		void Recycle();
	};

	const char* GFX_GROUP_Crush_DoT = 41;
	const char* GFX_GROUP_NeuralShockDoT = 40;
	const char* GFX_GROUP_SpeedDebuff = 39;
	const char* GFX_GROUP_RateOfFireDebuff = 38;
	const char* GFX_GROUP_HealthRegenDebuff = 37;
	const char* GFX_GROUP_HealthRegen = 36;
	const char* GFX_GROUP_Overload_Dmg = 35;
	const char* GFX_Group_TechImmunity = 34;
	const char* GFX_Group_BioticImmunity = 33;
	const char* GFX_Group_DisruptBeam = 32;
	const char* GFX_GROUP_TraumaDoT = 31;
	const char* GFX_GROUP_TraumaRegen = 30;
	const char* GFX_GROUP_Concussive_AccDebuff = 29;
	const char* GFX_GROUP_Concussive_Stun = 28;
	const char* GFX_GROUP_Sabotage_BurnDamage = 27;
	const char* GFX_GROUP_Carnage = 26;
	const char* GFX_GROUP_Entrench = 25;
	const char* GFX_GROUP_Sabotage_Sniper = 24;
	const char* GFX_GROUP_Sabotage_Assault = 23;
	const char* GFX_GROUP_Sabotage_Shotgun = 22;
	const char* GFX_GROUP_Sabotage_Pistol = 21;
	const char* GFX_GROUP_Singularity = 20;
	const char* GFX_GROUP_Acid_DR_Lowered = 19;
	const char* GFX_GROUP_Resin_Slow = 18;
	const char* GFX_GROUP_Immunity = 16;
	const char* GFX_GROUP_Neural_Shock = 15;
	const char* GFX_GROUP_Damping_Field = 14;
	const char* GFX_GROUP_AI_Hacking = 13;
	const char* GFX_GROUP_Sabotage_WeaponPowers = 12;
	const char* GFX_GROUP_Stasis = 11;
	const char* GFX_GROUP_Warp_WeakenArmor = 10;
	const char* GFX_GROUP_Warp_DoT = 9;
	const char* GFX_GROUP_Lift = 8;
	const char* GFX_GROUP_Take_Down = 7;
	const char* GFX_GROUP_Adrenaline = 6;
	const char* GFX_GROUP_Shield_Boost = 5;
	const char* GFX_GROUP_Suppression_Target = 4;
	const char* GFX_GROUP_Suppression_Caster = 3;
	const char* GFX_GROUP_Critical_Stun = 2;
	const char* GFX_GROUP_Critical_Dmg = 1;
	const char* GFX_GROUP_Marksman = 0;
	const char* GFX_GROUP_ALWAYS_STACKS = -1;

	enum EModalPower
	{
		ModalPower_Carnage,
		ModalPower_Overkill,
		ModalPower_Marksman,
	};

	enum ECombatReaction
	{
		CombatReaction_None,
		CombatReaction_Twitch,
		CombatReaction_Standard,
		CombatReaction_Stagger,
	};

	class BioPowerScriptDesign: public BioPowerScript
	{
		DECLARE_PACKAGE_CLASS( BioPowerScriptDesign, BioPowerScript, SFXGame )

	public:

		Bool HasRemainingShieldOfType( BioPawn* oPawn, Class* ShieldClass, SFXShield_Base* Shield );
		void SpawnVFXAtLocation( Vector Location, ParticleSystem* PS, SFXGame* oGame, SFXObjectPool* oPool, SFXEmitter* oEmitter, Rotator Rotation );
		Bool ImpactPlaceable( Actor* oCaster, Actor* oImpacted, Vector Momentum, Float PlotPlaceableDamage, Bool bForceDamage, KActor* oKActor, SFXKActor* oSFXKActor, BioPawn* oCasterPawn, BioPhysicsActor* PhysActor, Float fDamage );
		void RagdollPhysicsImpact( Pawn* oPawn, Actor* oImpactActor, Vector vImpactDir, Float fVelocityToDamageMult, BioPawn* oBioPawn, SFXModule_Damage* DmgModule, SFXPower* oPower, Float fDamage, Vector HitLocation, Vector Momentum, BioPawn* oCaster, Float fVelocity, SFXModule_GameEffectManager* Manager, Array<Byte> Parts, Vector2D OldCastTime, Bool bWasDeathPowerOn );
		void CheckBioticComboAchievement( BioPawn* oCaster, BioPawn* oTarget, Bool bOrderedByPlayer, BioPlayerController* oPC, BioWorldInfo* pWorldInfo );
		void RemoveBioticEffects( BioPawn* oPawn, Bool bRemoveStasis, SFXModule_GameEffectManager* Manager );
		Bool HasEffectType( Actor* oTarget, Class* EffectClass, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
		Float GetPhysicsLevelResistance( Actor* oTarget, Int PhysicsLevel, Float Resistance );
		Float GetBioticMultiplier( Actor* oTarget, SFXModule_GameEffectManager* Manager, Float fMultiplier );
		Float GetWeaponDamage( SFXWeapon* Weapon, Vector HitLocation, Actor* HitActor, Float RangeMultiplier, Float Range, Float BaseDamage );
		Float GetBulletsPerSecond( SFXWeapon* Weapon, Float RateOfFire, SFXWeapon_Shotgun_Base* oShotgun );
		Float LerpPowerParameter2D( Vector2D Parameter, Int PowerRank, Float Rank );
		Float LerpPowerParameter( Vector Parameter, Int PowerRank, Float Rank );
		Bool GetPowerRank( Actor* oActor, Int TalentID, Int PowerRank, BioTalentContainer* oTalents, BioPawnBehavior* oBehavior );
		Bool CanBeRagdolledByPowers( BioPawn* oPawn, SFXAI_Core* Controller );
		Bool IsInRagdoll( Actor* oActor, BioPawn* oPawn );
		Bool PlayRandomReaction( BioPawn* oPawn, Controller* InstigatedBy, Array<Byte> Actions, SFXAI_Core* AI, SFXPlayerController* PC, Byte CustomAction, Array<Byte> AvailableActions, BioCustomAction* CurrentCustomAction );
		Int HasAnimatedReactions( BioPawn* oPawn, Array<Byte> Actions, SFXAI_Core* AI, Byte CustomAction, Int nCount );
		Bool IsPlayingCombatReaction( Actor* oTarget, SFXAI_Core* AICore, Pawn* oPawn, BioCustomAction* oCustomAction, SFXCustomAction_DamageReaction* oDamageReaction );
		Byte GetCustomActionMapping( Byte Reaction );
		Bool CauseDamageReaction( Actor* oActor, Controller* InstigatedBy, Byte Reaction, Bool OverrideCurrentReaction, SFXAI_Core* AICore, BioPawn* oPawn, Byte CustomAction, BioCustomAction* ActionObject );
		Bool ApplyPermanentGameEffect( Actor* oTarget, Class* ClassName, Float fEffectValue, Name nmCategory, Controller* Instigator, SFXModule_GameEffectManager* Manager, SFXGameEffect* Effect );
		Bool ApplyTemporaryGameEffect( Actor* oTarget, Class* ClassName, Float fDuration, Float fEffectValue, Name nmCategory, Controller* Instigator, SFXModule_GameEffectManager* Manager, SFXGameEffect* Effect );
		Bool HideActorMesh( Actor* oActor, SkeletalMeshComponent* oComponent );
		Bool PurgeWeaponHeat( SFXWeapon* Weapon, Bool PurgeHeavyWeapons, SFXHeavyWeapon* HeavyWeapon );
		BioPawn* GetPawnByName( WorldInfo* oWorldInfo, Name PawnName, BioPawn* Pawn );
		Bool SetWeaponTracerVFX( Actor* oCaster, StaticMesh* Mesh, BioPawn* oPawn, InventoryManager* oInventoryManager, SFXWeapon* oWeapon );
		void SpawnRandomImpactVFX( BioPawn* Pawn, ParticleSystem* ImpactParticleSystem, SFXGame* oGame, SFXObjectPool* oPool, SkeletalMeshComponent* oSkeletalMesh, Name BoneName, ParticleSystemComponent* PSCO_ImpactVFX, Vector Location );
		Name GetRandomImpactBone( BioPawn* Pawn, Int BodyPartIndex, ReactionPart BodyPart, Int BoneIndex, Name BoneName );
		void SpawnWeaponImpactVFX( ImpactInfo Impact, ParticleSystem* ImpactParticleSystem, Bool UseImpactNormal, Bool UseGodBone, Float DrawScale, Actor* oHitActor, BioPawn* oPawn, SFXGame* oGame, SFXObjectPool* oPool, SkeletalMeshComponent* oSkeletalMesh, Vector DirectionToSprayParticles, ParticleSystemComponent* PSCO_ImpactVFX, Name BoneName );
		Bool RemovePowerEffects( Actor* oTarget, Actor* oCaster, Name sRemovePower, Bool bRemoveFromSquad, BioPawnBehavior* oTargetInfo, BioBaseSquad* oTargetSquad, Int nSquadIndex, Pawn* oSquadMember, Array<BioGameProperty*> aGP, Int nGPIndex, BioGameProperty* oCurrGP, Bool bReturn, SFXGamePropertiesModule* oGameProperties );
		Bool AdjustInventoryResource( Actor* oActor, Byte eResource, Int nAmount, BioEpicPawnBehavior* oBehavior, BioPlayerSquad* oPlayerSquad, SFXInventoryManager* oInventory, Int nCurrentAmount );
		Bool IncreaseAllPowerCooldowns( Actor* oActor, Float fDuration, Bool bIncreaseTech, Bool bIncreaseBiotic, Bool bIncreaseWeapon, Bool bIncreaseCombat, BioEpicPawnBehavior* oBehavior, Int nIndex, BioPower* oPower, Float fCooldownRemaining, Byte eDiscipline );
		Bool ClearAllPowerCooldowns( Actor* oActor, BioEpicPawnBehavior* oBehavior, Int nIndex, BioPower* oPower );
		Bool ModifyArmor( Actor* oTarget, Float fArmor, Bool bSetHeavyArmor, Pawn* TargetPawn, SFXArmor_Base* Armor );
		Bool ResetTechResistance( Actor* oTarget, BioPawn* ChkPawn, SFXLoadoutData* Loadout );
		Bool ResetBioticResistance( Actor* oTarget, BioPawn* ChkPawn, SFXLoadoutData* Loadout );
		Bool SetTechResistance( Actor* oTarget, Float fResistance, BioPawn* Pawn );
		Bool SetBioticResistance( Actor* oTarget, Float fResistance, BioPawn* Pawn );
		Byte GetFactionRelationship( Actor* oCaster, Actor* oTarget, BioPawn* oCasterPawn, BioPawn* oTargetPawn );
		Float GetDistanceModifier( Actor* oTarget, Float fDistanceFromImpact, Float fPowerMaxRange, Float fDistanceModifier, Vector vInvalid );
		Int GetPhysicsLevel( Actor* oImpacted, Bool bIgnoreResistance, SFXGameConfig* oConfig, BioPawn* oPawn );
		Bool IsMachineRace( Actor* oImpacted, BioPawn* BP );
		Bool IsAnimalRace( Actor* oImpacted, BioPawn* BP );
		Bool IsHumanoidRace( Actor* oImpacted, BioPawn* BP );
		Bool IsOfRace( Actor* oImpacted, Byte eRace, BioPawn* oImpactedPawn );
		Bool IsDeadBody( Actor* oImpacted, BioPawn* oImpactPawn );
		Bool IsPlaceable( Actor* oImpacted );
	};

	class SFXGameEffect_BioticWeakness: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_BioticWeakness, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Singularity: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Singularity, SFXGameEffect, SFXGame )

	public:

		Bool bApplied: 1; //offset = 104, size = 4
		Float ForceTimer; //offset = 108, size = 4
		Float InnerRadius; //offset = 112, size = 4
		BioPawn* Caster; //offset = 116, size = 4
		Float ForceInterval; //offset = 120, size = 4
		Vector SingularityLocation; //offset = 124, size = 12
		Float SingularityRadius; //offset = 136, size = 4
		Float Force; //offset = 140, size = 4
		Name BoneName; //offset = 144, size = 8
		Float minHeightForBodyFallSound; //offset = 152, size = 4

		Bool OutOfRangeCheck( Float Distance, SFXModule_GameEffectManager* Manager );
		Bool IsStillInSingularity(, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
		void OnRemoved( BioPawn* oBioPawn );
		void MoveActor( Vector Direction, Float Distance, Vector ForceVector, Float fVelocity, Float fTimeLeft );
		void InitialMovement( Vector Direction );
		void OnUpdate( Float DeltaSeconds, BioPawn* oBioPawn );
		void OnApplied();
	};

	class SFXGameEffect_Crush: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Crush, SFXGameEffect, SFXGame )

	public:

		Name BoneName; //offset = 104, size = 8
		Float UpwardForce; //offset = 112, size = 4
		Float SlamDownForce; //offset = 116, size = 4
		ParticleSystem* SlamPS; //offset = 120, size = 4
		BioPawn* Caster; //offset = 124, size = 4
		Float minHeightForBodyFallSound; //offset = 128, size = 4

		void OnRemoved( SFXGame* oGame, SFXObjectPool* oPool, SFXEmitter* oEmitter, BioPawn* oBioPawn );
		void OnUpdate( Float DeltaSeconds, BioPawn* oBioPawn );
		void OnApplied();
	};

	class SFXGameEffect_Pull: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Pull, SFXGameEffect, SFXGame )

	public:

		Vector ForceVector; //offset = 104, size = 12
		Float Force; //offset = 116, size = 4
		Vector Direction; //offset = 120, size = 12
		Name BoneName; //offset = 132, size = 8
		BioPawn* Caster; //offset = 140, size = 4
		Bool bGravityRampUp: 1; //offset = 144, size = 4
		Float GravityRampUpTime; //offset = 148, size = 4
		Float MinimumVelocity; //offset = 152, size = 4
		Float MinimumVelocityForceMult; //offset = 156, size = 4
		Float minHeightForBodyFallSound; //offset = 160, size = 4

		Bool HasOtherGravityEffects(, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
		void OnRemoved();
		void MoveActor( Vector vForce );
		void OnUpdate( Float DeltaSeconds, BioPawn* oBioPawn );
		void OnApplied();
	};

	class SFXGameEffect_AntiGravity: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_AntiGravity, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
		void OnApplied( SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
	};

	class SFXGameEffect_Ragdoll: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Ragdoll, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( BioPawn* Pawn, BioPawnBehavior* oBehavior );
		void OnApplied( BioPawn* Pawn, BioPawnBehavior* oBehavior, Vector Impulse, Vector HitLocation );
	};

	class SFXGameEffect_WeldPhysics: public SFXGameEffect_DeathEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_WeldPhysics, SFXGameEffect_DeathEffect, SFXGame )

	public:

		BioPawn* Caster; //offset = 116, size = 4
		BioVFXTemplate* CrustTemplate; //offset = 120, size = 4
		BioVisualEffect* CrustEffect; //offset = 124, size = 4
		Byte CustomActionType; //offset = 128, size = 1
		Bool bFreezeSucceeded: 1; //offset = 132, size = 4

		void OnRemoved( BioPawn* oPawn, SFXAI_Core* AI, BioCustomAction* CurrentCustomAction, SFXCustomAction_Frozen* FrozenCustomAction );
		void RemoveExistingWeldEffects( Int idx, SFXGameEffect* Effect, SFXModule_GameEffectManager* Manager );
		void OnApplied( BioPawn* oPawn, SFXAI_Core* AI, BioCustomAction* CurrentCustomAction, Vector HitLocation, Vector HitNormal, TraceHitInfo HitInfo, SFXCustomAction_Frozen* FrozenAction );
	};

	class SFXGameEffect_Stasis: public SFXGameEffect_WeldPhysics
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Stasis, SFXGameEffect_WeldPhysics, SFXGame )

	public:

		void OnRemoved();
		void OnApplied();
	};

	class SFXGameEffect_PhysicsDamageMultiplier: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PhysicsDamageMultiplier, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXDamageType_PowerPhysics: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_PowerPhysics, SFXDamageType, SFXGame )

	public:
	};

	class SFXGameEffect_CryoFreeze: public SFXGameEffect_WeldPhysics
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_CryoFreeze, SFXGameEffect_WeldPhysics, SFXGame )

	public:

		BioVFXTemplate* ThawCrustTemplate; //offset = 136, size = 4
		Bool bThawStarted: 1; //offset = 140, size = 4
		Float ThawTime; //offset = 144, size = 4
		BioVisualEffect* ThawCrust; //offset = 148, size = 4
		Float FrozenPhysicsDamageIncrease; //offset = 152, size = 4
		SFXGameEffect_PhysicsDamageMultiplier* PhysicsDamageMultiplier; //offset = 156, size = 4

		void OnRemoved();
		void OnUpdate( Float DeltaSeconds, BioPawn* oPawn );
		void OnApplied( SFXModule_GameEffectManager* Manager );
	};

	class SFXGameEffect_DelayedCryoFreeze: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_DelayedCryoFreeze, SFXGameEffect, SFXGame )

	public:

		Array<Byte> AnimatedReactions; //offset = 104, size = 12
		Bool bReactionPlayed: 1; //offset = 116, size = 4
		BioVFXTemplate* DeathEffect; //offset = 120, size = 4
		BioVFXTemplate* CrustTemplate; //offset = 124, size = 4
		WwiseEvent* FreezingSound; //offset = 128, size = 4
		BioVisualEffect* CrustEffect; //offset = 132, size = 4

		void OnRemoved( BioPawn* oPawn, BioVisualEffect* VFXInstance, SFXGameEffect_CryoFreeze* FreezeEffect, SFXGameEffect_HealthRegenPenalty* HoTDebuffEffect, SFXModule_GameEffectManager* Manager );
		void OnUpdate( Float DeltaSeconds );
		void OnApplied( BioPawn* oPawn );
	};

	class SFXDamageType_Explosion: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Explosion, SFXDamageType, SFXGame )

	public:
	};

	class BioRandomActivity: public BioBaseActivity
	{
		DECLARE_PACKAGE_CLASS( BioRandomActivity, BioBaseActivity, SFXGame )

	public:

		Float m_fBaseTime; //offset = 96, size = 4
		Float m_fVarianceTime; //offset = 100, size = 4
		Array<Float> m_afTwitchProbabilitys; //offset = 104, size = 12
	};

	class BioSaveTriggerVolume: public TriggerVolume
	{
		DECLARE_PACKAGE_CLASS( BioSaveTriggerVolume, TriggerVolume, SFXGame )

	public:

		Bool DisableSave: 1; //offset = 568, size = 4
		DisableSaveReason DisableSaveReason; //offset = 572, size = 4
		Actor* PlayerSpawnLocation; //offset = 576, size = 4
	};

	class BioSeqAct_ActivateCharacterCreation: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ActivateCharacterCreation, SequenceAction, SFXGame )

	public:

		String m_sCharacterCreationMap; //offset = 240, size = 12

		void Activated();
	};

	class BioSeqAct_AddPlaypenVolume: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AddPlaypenVolume, SequenceAction, SFXGame )

	public:

		Array<Actor*> Volumes; //offset = 240, size = 12
		Actor* Squad; //offset = 252, size = 4

		void Activated( Int Index, Int SquadVolumesIndex, BioBaseSquad* TestSquad, BioPlaypenVolume* TestVolume, Bool bSubtractiveVolumeAdded, Bool bExistingPlaypen, Int nOriginalCount );
	};

	class BioSeqAct_AddSquadToPerception: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AddSquadToPerception, SequenceAction, SFXGame )

	public:

		Actor* oPawn; //offset = 240, size = 4
		Actor* oPerceivedSquad; //offset = 244, size = 4

		void Activated( BioEpicPawnBehavior* oBehavior, BioBaseSquad* oTargetSquad, BioBaseSquad* oSquad );
	};

	class BioSeqAct_AddToParty: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AddToParty, SequenceAction, SFXGame )

	public:

		Bool TeleportToLeader: 1; //offset = 240, size = 4
		Float TeleportOffsetRear; //offset = 244, size = 4
		Float TeleportOffsetSide; //offset = 248, size = 4

		void Activated( Array<Object*> aLeaderObjects, Array<Object*> aFollowerObjects, BioPawn* leader, BioPawn* follower, BioBaseSquad* oSquad, Int I, Int J, Vector TargetLocation, Vector vCross, Vector vTeleportLocation, Bool bIsPlayerSquad, SFXPawn_Henchman* Henchman, SFXAI_Henchman* oHenchAI );
	};

	enum ETreasureType
	{
		AMMO_TREASURE,
		MEDIGEL_TREASURE,
		CREDITS_TREASURE,
		EEZO_TREASURE,
		PALLADIUM_TREASURE,
	};

	class SFXTreasureUseModule: public SFXSimpleUseModule
	{
		DECLARE_PACKAGE_CLASS( SFXTreasureUseModule, SFXSimpleUseModule, SFXGame )

	public:

		Int ResourcePercent; //offset = 128, size = 4
		Byte TreasureType; //offset = 132, size = 1

		Bool IsDefaultActionPossible();
		Bool GiveAmmo( Byte ttype, BioWorldInfo* oWorldInfo, Int ResourceAmount, SFXHeavyWeapon* HWeapon, SFXHeavyWeapon* FoundWeapon, SFXInventoryManager* InvManager, BioPlayerController* Controller, Int nCurrentAmmo, Bool bGaveAmmo );
		void ScaleAmmo( SFXHeavyWeapon* HWeapon, BioWorldInfo* BWI, SFXGame* Game );
		Bool GiveInventoryTreasure( Byte InvType, Int Amount, BioWorldInfo* oWorldInfo, Bool bIsSalvage, Bool bIgnoreBudget, Bool bExtraIfLow, BioPlayerController* oController, SFXInventoryManager* oInventory, Int nCurrentAmount, Int nGivenAmount, Bool bTickerResource );
		Bool GiveMediGel( Byte ttype, BioWorldInfo* oWorldInfo, Int ResourceAmount, Bool bAbsoluteAmount, Bool bGaveMediGel, SFXGame* Game );
		Bool GiveCash( Byte ttype, BioWorldInfo* oWorldInfo, Int nBudgetPercent, Bool bAbsoluteAmount, Bool bIsSalvage, SFXPlotTreasure* oTreasure, SResourceBudget stBudget, Int nAmount, Bool bResult );
		Bool AwardResource( Byte ttype, BioWorldInfo* oWorldInfo, Int nBudgetPercent, Bool bAbsoluteAmount, Bool bIsSalvage, Bool bResult );
		Class* GetSaveObjectClass();
		void SetTargetable( Bool bTargetable, ActorComponent* Comp, StaticMeshComponent* oStaticMesh, LinearColor EmissiveColor, Int nIndex, MaterialInstanceConstant* M, MaterialInstanceConstant* Instance );
		void PostBeginPlay();
		void OnUsed( Actor* User, Bool bGaveResources );
	};

	class BioSeqAct_AdjustCostForDiscount: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AdjustCostForDiscount, SequenceAction, SFXGame )

	public:

		Int nPrice; //offset = 240, size = 4
		Int nState; //offset = 244, size = 4
		Int nDiscountedPrice; //offset = 248, size = 4
		Bool bDiscount: 1; //offset = 252, size = 4
		Byte TreasureType; //offset = 256, size = 1
		Name nmLevel; //offset = 260, size = 8

		void Activated( SFXInventoryManager* oInv, Int CashAmount, BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, STreasure stTreasure );
	};

	class BioSeqAct_AdjustStability: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AdjustStability, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_AOECauseDamage: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AOECauseDamage, SequenceAction, SFXGame )

	public:

		BioDamageType* m_pDamage; //offset = 240, size = 4
		Float DamageAmount; //offset = 244, size = 4
		Float DamageRadius; //offset = 248, size = 4
		Class* DamageType; //offset = 252, size = 4
		Bool bDamageFalloff: 1; //offset = 256, size = 4
		Bool bForceCinematicDamage: 1; //offset = 256, size = 4
		Float MomentumScale; //offset = 260, size = 4
		Actor* InstigatorController; //offset = 264, size = 4

		void Activated( Controller* Instigator, BioWorldInfo* WorldInfo, Object* ChkObject, Actor* ChkTarget, Actor* DamageActor, Vector ToDamageActor, Float Distance );
	};

	class BioSeqAct_AreaTransition: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AreaTransition, SequenceAction, SFXGame )

	public:

		Name AreaName; //offset = 240, size = 8
		Name StartPoint; //offset = 248, size = 8

		void Activated();
	};

	class BioSeqAct_AttachCrustEffect: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AttachCrustEffect, SequenceAction, SFXGame )

	public:

		BioVFXTemplate* oEffect; //offset = 240, size = 4
		Float fLifeTime; //offset = 244, size = 4
		Actor* Target; //offset = 248, size = 4

		void Activated( BioVisualEffect* Effect, Actor* TheActor );
	};

	class BioSeqAct_AttachVFX: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AttachVFX, SequenceAction, SFXGame )

	public:

		Array<Actor*> m_oAttachTo; //offset = 240, size = 12
		Name m_nmSocket; //offset = 252, size = 8
		Vector m_vOffset; //offset = 260, size = 12
		ParticleSystem* m_oParticles; //offset = 272, size = 4
		Bool m_bActivateOnAttach: 1; //offset = 276, size = 4

		void Activated( Pawn* Op, ParticleSystemComponent* oEmitterComp, Int I );
	};

	class BioSeqAct_AttachVisualEffect: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AttachVisualEffect, SequenceAction, SFXGame )

	public:

		Array<Actor*> m_oAttachTo; //offset = 240, size = 12
		Name m_nmSocketOrBone; //offset = 252, size = 8
		Vector m_vOffset; //offset = 260, size = 12
		BioVFXTemplate* m_oEffect; //offset = 272, size = 4

		void Activated( BioVisualEffect* oEffect, Int I );
	};

	class BioSeqAct_AutoSave: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AutoSave, BioSequenceLatentAction, SFXGame )

	public:

		Bool bShowSaveGui: 1; //offset = 260, size = 4
		Bool bAbort: 1; //offset = 260, size = 4

		Bool UpdateOp( Float fDeltaT );
		void Activated();
	};

	class BioSeqAct_AwardAchievement: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_AwardAchievement, SequenceAction, SFXGame )

	public:

		Int m_nAchievementId; //offset = 240, size = 4
		Int Value; //offset = 244, size = 4

		void Activated();
	};

	class BioSeqAct_BioToggleCinematicMode: public SeqAct_ToggleCinematicMode
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_BioToggleCinematicMode, SeqAct_ToggleCinematicMode, SFXGame )

	public:

		Bool bCinematicInputMode: 1; //offset = 244, size = 4
		Bool bDisableCinematicSkip: 1; //offset = 244, size = 4
		Bool m_bEnterCombatModeOnEnd: 1; //offset = 244, size = 4
		String sSkipEvent; //offset = 248, size = 12

		void Activated( BioWorldInfo* oBioInfo, BioPlayerController* oPlayerController, BioPlayerInput* pInput, SFXPawn_Player* pPlayer );
	};

	class BioSeqAct_BreakFromCover: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_BreakFromCover, SequenceAction, SFXGame )

	public:

		Actor* m_oPawn; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_CancelTutorial: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_CancelTutorial, SequenceAction, SFXGame )

	public:

		Name Tutorial; //offset = 240, size = 8
		Bool bFadeOut: 1; //offset = 248, size = 4

		void Activated();
	};

	class BioSeqAct_CauseDamage: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_CauseDamage, SequenceAction, SFXGame )

	public:

		BioDamageType* m_pDamage; //offset = 240, size = 4
		Float DamageAmount; //offset = 244, size = 4
		Class* DamageType; //offset = 248, size = 4
		Float MomentumScale; //offset = 252, size = 4
		Actor* InstigatorController; //offset = 256, size = 4
		Bool bForceCinematicDamage: 1; //offset = 260, size = 4

		void Activated( Controller* Instigator, BioWorldInfo* WorldInfo, Object* ChkObject, Actor* ChkTarget, Vector Momentum );
	};

	class BioSeqAct_ChangeAI: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ChangeAI, SequenceAction, SFXGame )

	public:

		Actor* oPawn; //offset = 240, size = 4
		Class* ControllerClass; //offset = 244, size = 4
		Bool SaveOldAIController: 1; //offset = 248, size = 4

		void Activated( BioAiController* oController );
	};

	class BioSeqAct_ClearAllActions: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ClearAllActions, SequenceAction, SFXGame )

	public:

		void Activated();
	};

	class BioSeqAct_ClearBrowserWheelStateOverrides: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ClearBrowserWheelStateOverrides, SequenceAction, SFXGame )

	public:

		void Activated( BioWorldInfo* oWorldInfo );
	};

	class BioSeqAct_ClearNewCharacterEffects: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ClearNewCharacterEffects, SequenceAction, SFXGame )

	public:

		void Activated( BioWorldInfo* oWorldInfo, BioSFPanel* oPanel, BioSFHandler_NewCharacter* oHandler, Int I );
	};

	class BioSeqAct_ClearSavedMap: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ClearSavedMap, SequenceAction, SFXGame )

	public:

		String m_sMapToClear; //offset = 240, size = 12
		String m_sChunkToClear; //offset = 252, size = 12

		void Activated();
	};

	class BioSeqAct_ClearSomeActions_Queue: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ClearSomeActions_Queue, SequenceAction, SFXGame )

	public:

		void Activated();
	};

	class BioSeqAct_ClearSomeActions_State: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ClearSomeActions_State, SequenceAction, SFXGame )

	public:

		void Activated();
	};

	class BioSeqAct_Cover_AddCoverFrom: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_Cover_AddCoverFrom, SequenceAction, SFXGame )

	public:

		Actor* m_oUseingCover; //offset = 240, size = 4
		Actor* m_oAdd; //offset = 244, size = 4
		Int m_nRank; //offset = 248, size = 4

		void Activated();
	};

	class BioSeqAct_Cover_GetCoveringRank: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_Cover_GetCoveringRank, SequenceAction, SFXGame )

	public:

		Actor* m_oUseingCover; //offset = 240, size = 4
		Actor* m_oRankOf; //offset = 244, size = 4
		Int m_nRank; //offset = 248, size = 4

		void Activated();
	};

	class BioSeqAct_Cover_RemoveCoverFrom: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_Cover_RemoveCoverFrom, SequenceAction, SFXGame )

	public:

		Actor* m_oUseingCover; //offset = 240, size = 4
		Actor* m_oRemove; //offset = 244, size = 4

		void Activated();
	};

	class BioSeqAct_Cover_SetCoveringRank: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_Cover_SetCoveringRank, SequenceAction, SFXGame )

	public:

		Actor* m_oUseingCover; //offset = 240, size = 4
		Actor* m_oCoveringFrom; //offset = 244, size = 4
		Int m_nRank; //offset = 248, size = 4

		void Activated();
	};

	class BioSeqAct_Crouch: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_Crouch, SequenceAction, SFXGame )

	public:

		Actor* m_oActor; //offset = 240, size = 4
		Bool m_bCrouch: 1; //offset = 244, size = 4

		void Activated( Pawn* oPawn, PlayerController* oPlayer );
	};

	class BioSeqAct_CustomizeStageCameras: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_CustomizeStageCameras, SequenceAction, SFXGame )

	public:

		Float m_fCameraHeightDelta; //offset = 240, size = 4
		Float m_fCameraPitchDelta; //offset = 244, size = 4
		Float m_fCameraYawDelta; //offset = 248, size = 4
		Float m_fCameraFOVDelta; //offset = 252, size = 4
		Float m_fCameraNearPlaneDelta; //offset = 256, size = 4
		Float m_fCameraFocusInnerRadiusDelta; //offset = 260, size = 4
		Float m_fCameraFocusDistanceDelta; //offset = 264, size = 4

		void Activated();
	};

	class BioSeqAct_DebugMessage: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DebugMessage, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_DisableSoundSets: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DisableSoundSets, SequenceAction, SFXGame )

	public:

		Bool m_bEnableSoundSets: 1; //offset = 240, size = 4
		Bool m_bApplyToAllHenchmen: 1; //offset = 240, size = 4
	};

	class BioSeqAct_DisableSquad: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DisableSquad, SequenceAction, SFXGame )

	public:

		BioBaseSquad* Squad; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_DoActionInRadius: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DoActionInRadius, SequenceAction, SFXGame )

	public:

		Class* ClassFilter; //offset = 240, size = 4
		Actor* SourceActor; //offset = 244, size = 4
		Float Radius; //offset = 248, size = 4
		Array<Actor*> m_aActorList; //offset = 252, size = 12
		Int m_nIndex; //offset = 264, size = 4
		Actor* CurrentObject; //offset = 268, size = 4

		void Activated( Actor* oTempActor );
	};

	class BioSeqAct_DoActionInVolume: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DoActionInVolume, SequenceAction, SFXGame )

	public:

		Class* ClassFilter; //offset = 240, size = 4
		Actor* Volume; //offset = 244, size = 4
		Int m_nIndex; //offset = 248, size = 4
		Array<Actor*> m_aActorList; //offset = 252, size = 12
		Actor* CurrentObject; //offset = 264, size = 4

		void Activated( Actor* TouchingActor );
	};

	class BioSeqAct_DUIClear: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUIClear, SequenceAction, SFXGame )

	public:

		Bool bModal: 1; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_DUIIsActive: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUIIsActive, SequenceAction, SFXGame )

	public:

		Bool bModal: 1; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_DUISetBarFillDirection: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetBarFillDirection, SequenceAction, SFXGame )

	public:

		Bool bModalBar: 1; //offset = 240, size = 4
		Bool bLeftToRight: 1; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_DUISetBarFillPercent: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetBarFillPercent, SequenceAction, SFXGame )

	public:

		Bool bModalBar: 1; //offset = 240, size = 4
		Int nPercent; //offset = 244, size = 4

		void Activated();
	};

	class BioSeqAct_DUISetBarMarkers: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetBarMarkers, SequenceAction, SFXGame )

	public:

		Bool bModalBar: 1; //offset = 240, size = 4
		Int nMarker1; //offset = 244, size = 4
		Int nMarker2; //offset = 248, size = 4

		void Activated();
	};

	class BioSeqAct_DUISetCounterValue: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetCounterValue, SequenceAction, SFXGame )

	public:

		Bool bModalCounter: 1; //offset = 240, size = 4
		Int nValue; //offset = 244, size = 4

		void Activated();
	};

	class BioSeqAct_DUISetElementColor: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetElementColor, SequenceAction, SFXGame )

	public:

		Byte Element; //offset = 240, size = 1
		Color oColor; //offset = 244, size = 4

		void Activated( Array<Int> intVars, Bool bColorLinked, Color stColor );
	};

	class BioSeqAct_DUISetElementPulsing: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetElementPulsing, SequenceAction, SFXGame )

	public:

		Byte Element; //offset = 240, size = 1
		Bool bPulsing: 1; //offset = 244, size = 4
		Float fMinAlpha; //offset = 248, size = 4
		Float fCycleTime; //offset = 252, size = 4

		void Activated();
	};

	class BioSeqAct_DUISetElementVisible: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetElementVisible, SequenceAction, SFXGame )

	public:

		Byte Element; //offset = 240, size = 1
		Bool bVisible: 1; //offset = 244, size = 4
		Float fFadeTime; //offset = 248, size = 4

		void Activated();
	};

	class BioSeqAct_DUISetQuasarLayout: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetQuasarLayout, SequenceAction, SFXGame )

	public:

		Bool bShow: 1; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_DUISetTextStringRef: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_DUISetTextStringRef, SequenceAction, SFXGame )

	public:

		Byte Element; //offset = 240, size = 1
		srText srText; //offset = 244, size = 4

		void Activated();
	};

	class BioSeqAct_EnableSquad: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_EnableSquad, SequenceAction, SFXGame )

	public:

		BioBaseSquad* Squad; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_EndGame: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_EndGame, SequenceAction, SFXGame )

	public:

		srEndGameMessage srEndGameMessage; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_EnsurePawnIsUpright: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_EnsurePawnIsUpright, SequenceAction, SFXGame )

	public:

		Actor* oPawn; //offset = 240, size = 4

		void Activated( BioPawn* oBioPawn );
	};

	class BioSeqAct_EnterVehicle: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_EnterVehicle, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_ExitVehicle: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ExitVehicle, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_FactionRelationShip: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_FactionRelationShip, SequenceAction, SFXGame )

	public:

		Object* Input1; //offset = 240, size = 4
		Object* Input2; //offset = 244, size = 4

		void Activated( BioPawn* Pawn1, BioPawn* Pawn2 );
		BioPawn* GetPawnFrom( Object* oInObj );
	};

	class BioSeqAct_FindCover: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_FindCover, SequenceAction, SFXGame )

	public:

		Actor* m_oSeeksCover; //offset = 240, size = 4
		Actor* m_oNear; //offset = 244, size = 4
		Float m_fMaxRange; //offset = 248, size = 4
		Array<Actor*> m_aoCoverFrom; //offset = 252, size = 12
		Actor* m_oNoCoverFrom; //offset = 264, size = 4
		Actor* m_oCover; //offset = 268, size = 4
		Int m_nSlot; //offset = 272, size = 4
		Bool bSquadCoverOnly: 1; //offset = 276, size = 4

		void Activated();
	};

	class BioSeqAct_FollowSquadLeader: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_FollowSquadLeader, SequenceAction, SFXGame )

	public:

		void Activated();
	};

	class BioSeqAct_ForceResourceLoad: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ForceResourceLoad, SequenceAction, SFXGame )

	public:

		Array<Object*> ResourceArray; //offset = 240, size = 12

		void Activated();
	};

	class BioSeqAct_GalaxyMap: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GalaxyMap, SeqAct_Latent, SFXGame )

	public:
	};

	class BioSeqAct_GetAchievementStatus: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetAchievementStatus, SequenceAction, SFXGame )

	public:

		Int m_nAchievementId; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_GetClass: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetClass, SequenceAction, SFXGame )

	public:

		Pawn* m_oPawn; //offset = 240, size = 4
		Int m_eClass; //offset = 244, size = 4

		void Activated( BioPawn* oBioPawn, BioAttributesPawnParty* oPawnInfo );
	};

	class BioSeqAct_GetConnectedObjects: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetConnectedObjects, SequenceAction, SFXGame )

	public:

		BioArtPlaceable* oArtPlaceable; //offset = 240, size = 4
		String sObjectA; //offset = 244, size = 12
		String sObjectB; //offset = 256, size = 12

		void Activated( BioArtPlaceableBehavior* oBehave );
	};

	class BioSeqAct_GetEquippedWeapon: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetEquippedWeapon, SequenceAction, SFXGame )

	public:

		Actor* oPawn; //offset = 240, size = 4
		Bool bZoomed: 1; //offset = 244, size = 4

		void Activated( BioPawn* Pawn, SFXWeapon* oWeapon );
	};

	class SFXWeapon_AssaultRifle_Base: public SFXWeapon
	{
		DECLARE_PACKAGE_CLASS( SFXWeapon_AssaultRifle_Base, SFXWeapon, SFXGame )

	public:

		void ScaleWeapon( Int Level, Float AccuracyBonus );
		Float CalculateStaticBonus(, Float Bonus );
	};

	class SFXWeapon_HeavyPistol_Base: public SFXWeapon
	{
		DECLARE_PACKAGE_CLASS( SFXWeapon_HeavyPistol_Base, SFXWeapon, SFXGame )

	public:

		void ModifyDamage( Float BaseDamage, Vector HitLocation, Actor* HitActor );
	};

	class SFXWeapon_AutoPistol_Base: public SFXWeapon
	{
		DECLARE_PACKAGE_CLASS( SFXWeapon_AutoPistol_Base, SFXWeapon, SFXGame )

	public:

		void ScaleWeapon( Int Level );
		void ModifyDamage( Float BaseDamage, Vector HitLocation, Actor* HitActor );
	};

	class BioVehicleDamageComponent: public BioDamageComponent
	{
		DECLARE_PACKAGE_CLASS( BioVehicleDamageComponent, BioDamageComponent, SFXGame )

	public:
	};

	enum EShieldType
	{
		EShieldType_All,
		EShieldType_Energy,
		EShieldType_Barrier,
	};

	class BioSeqAct_GetShieldPercentage: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetShieldPercentage, SequenceAction, SFXGame )

	public:

		Actor* m_oPawn; //offset = 240, size = 4
		Byte eType; //offset = 244, size = 1
		Float m_fShieldPct; //offset = 248, size = 4
		Float m_fShieldMax; //offset = 252, size = 4
		Float m_fShieldCurrent; //offset = 256, size = 4

		void Activated( Pawn* ChkPawn, SFXShield_Base* Shield, SFXShield_Energy* EnergyShield, SFXShield_Biotic* BarrierShield, SFXShield_Armour* ArmourShield );
	};

	class BioSeqAct_GetSquad: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetSquad, SequenceAction, SFXGame )

	public:

		Actor* oPawn; //offset = 240, size = 4
		Actor* oSquad; //offset = 244, size = 4

		void Activated( BioEpicPawnBehavior* oBehavior );
	};

	class BioSeqAct_GetSquadInfo: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetSquadInfo, SequenceAction, SFXGame )

	public:

		Actor* m_oActor; //offset = 240, size = 4
		Bool bIncludeDeadInCount: 1; //offset = 244, size = 4
		Bool m_bIsEmpty: 1; //offset = 244, size = 4
		Pawn* m_oSquadLeader; //offset = 248, size = 4
		Int m_nSquadCount; //offset = 252, size = 4
		Int m_nHackedCount; //offset = 256, size = 4
		Int m_nHazardLevelMax; //offset = 260, size = 4

		void Activated( Pawn* oPawn, BioBaseSquad* oSquad, BioPlayerController* oPlayer, Int I, Int VarIdx, Int LinkIdx, SeqVar_ObjectList* AList, Pawn* oSquadMember, Int nCount );
	};

	enum EBioSeqActGetTalentRankOutput
	{
		EBioSeqActGetTalentRankOutput_Success,
		EBioSeqActGetTalentRankOutput_Failure,
	};

	enum EBioSeqActGetTalentRankInput
	{
		EBioSeqActGetTalentRankInput_TalentID,
		EBioSeqActGetTalentRankInput_Pawn,
	};

	class BioSeqAct_GetTalentRank: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetTalentRank, SequenceAction, SFXGame )

	public:

		Int m_TalentID; //offset = 240, size = 4
		BioPawn* m_targetPawn; //offset = 244, size = 4
		Int m_resultRank; //offset = 248, size = 4

		void Activated( Bool wasSuccessful, Int talentRank );
	};

	class BioSeqAct_GetTutorialViewed: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GetTutorialViewed, SequenceAction, SFXGame )

	public:

		Name Tutorial; //offset = 240, size = 8

		void Activated();
	};

	class BioSeqAct_GrantBonusTalent: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GrantBonusTalent, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_GrantGenericXP: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GrantGenericXP, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_GrantScaledXP: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_GrantScaledXP, SequenceAction, SFXGame )

	public:

		Byte EXPCurve; //offset = 240, size = 1

		void Activated( Int Curve );
	};

	class BioSeqAct_HideAllWeapons: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_HideAllWeapons, SequenceAction, SFXGame )

	public:

		void Activated();
	};

	class BioSeqAct_HideSniperHudOverlay: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_HideSniperHudOverlay, SequenceAction, SFXGame )

	public:

		void Activated();
	};

	class BioSeqAct_HUDDisplayState: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_HUDDisplayState, SequenceAction, SFXGame )

	public:

		void Activated( BioWorldInfo* oWorldInfo, BioHUD* oHUD );
	};

	enum EBioSeqActIncreaseTalentMaxRankOutput
	{
		EBioSeqActIncreaseTalentMaxRankOutput_Success,
		EBioSeqActIncreaseTalentMaxRankOutput_Failure,
	};

	enum EBioSeqActIncreaseTalentMaxRankInput
	{
		EBioSeqActIncreaseTalentMaxRankInput_TalentID,
		EBioSeqActIncreaseTalentMaxRankInput_MaxRank,
	};

	class BioSeqAct_IncreaseTalentMaxRank: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_IncreaseTalentMaxRank, SequenceAction, SFXGame )

	public:

		Int m_TalentID; //offset = 240, size = 4
		Int m_maxRankIncrement; //offset = 244, size = 4
		Int m_rankIncrement; //offset = 248, size = 4

		void Activated( BioPawn* Player, Bool wasSuccessful );
	};

	class BioSeqAct_InterruptAmbientConversation: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_InterruptAmbientConversation, SequenceAction, SFXGame )

	public:

		BioConversation* IgnoreConversation; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_IsActiveConversation: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_IsActiveConversation, SequenceAction, SFXGame )

	public:

		BioConversation* Conversation; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_IsVehicle: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_IsVehicle, SequenceAction, SFXGame )

	public:

		Pawn* m_oPawn; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_KillPawn: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_KillPawn, SequenceAction, SFXGame )

	public:

		void Activated( BioPawn* oPawn, Controller* oTargetController, Int I, BioPawnBehavior* oBehavior );
	};

	class BioSeqAct_LockTarget: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_LockTarget, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_MiniGame: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_MiniGame, SequenceAction, SFXGame )

	public:

		Int m_nMiniGameID; //offset = 240, size = 4

		void Activated();
	};

	class BioSeqAct_ModifyPropertyHeightfog: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ModifyPropertyHeightfog, SequenceAction, SFXGame )

	public:

		HeightFog* oFog; //offset = 240, size = 4
		Float fDensity; //offset = 244, size = 4

		void Activated( Bool bWasEnabled );
	};

	class BioSeqAct_NearClipPlane: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_NearClipPlane, SequenceAction, SFXGame )

	public:

		Float fValue; //offset = 240, size = 4

		void Activated( BioWorldInfo* oWorldInfo, Int N );
	};

	class BioSeqAct_PlayFaceFXAnim: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PlayFaceFXAnim, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_PlaySoundSet: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PlaySoundSet, SequenceAction, SFXGame )

	public:

		SFXVocalizationEvent Event; //offset = 240, size = 20
		Byte Role; //offset = 260, size = 1
		Actor* Parameter; //offset = 264, size = 4
	};

	class BioSeqAct_PopupLootGui: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PopupLootGui, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_PositionHopper: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_PositionHopper, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_Ragdoll: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_Ragdoll, SequenceAction, SFXGame )

	public:

		Actor* mActor; //offset = 240, size = 4

		void Activated( BioPawn* oPawn, Vector Impulse, Vector HitLocation );
	};

	class BioSeqAct_RemoveFromParty: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_RemoveFromParty, SequenceAction, SFXGame )

	public:

		void Activated( Array<Object*> aPawnObjects, BioPawn* objPawn, Int I );
	};

	class BioSeqAct_RemovePlaypenVolume: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_RemovePlaypenVolume, SequenceAction, SFXGame )

	public:

		Array<Actor*> Volumes; //offset = 240, size = 12
		Actor* Squad; //offset = 252, size = 4

		void Activated( Int VolumesIndex, Int SquadVolumesIndex, BioBaseSquad* TestSquad, BioPlaypenVolume* TestVolume );
	};

	class BioSeqAct_ResetAnimationState: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ResetAnimationState, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_RestoreAI: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_RestoreAI, SequenceAction, SFXGame )

	public:

		Actor* oPawn; //offset = 240, size = 4

		void Activated( BioAiController* oController );
	};

	class BioSeqAct_ResumeWalking: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ResumeWalking, SequenceAction, SFXGame )

	public:

		BioPawn* m_oPawn; //offset = 240, size = 4

		void Activated();
	};


	class SFXAI_Ambient: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_Ambient, SFXAI_Core, SFXGame )

	public:
		struct Idle
		{
		};

		struct CustomAction_WaypointAnimation
		{
			/*
			ExecuteCustomAction
			*/
		};

		struct PausedOnWaypoint
		{
			/*
			ResumeWalking
			*/
		};

		struct WalkingWaypoints
		{
			/*
			MaintainVelocity
			PoppedState
			UpdateNextWaypoint
			SetNextWayPoint
			*/
		};

		struct StandingIdle
		{
		};

		Int m_nWaypointIndex; //offset = 1368, size = 4
		SFXNav_WayPoint* m_oCurrentWaypoint; //offset = 1372, size = 4
		Bool m_bPaused: 1; //offset = 1376, size = 4
		Bool m_bCountingUp: 1; //offset = 1376, size = 4
		Byte m_eWalkOrder; //offset = 1380, size = 1
		Name m_WaypointAnimName; //offset = 1384, size = 8
		Int m_nWaypointBodyStance; //offset = 1392, size = 4

		void PlayWaypointAnim( Name AnimName, Int eStance );
		void ResumeWalking();
		void MoveOnScriptedRoute( Route* oRoute, Int nNearestWaypoint, Bool bWalking, Byte eWalkOrder, Bool bSkipNodes );
		Int FindNearestRoutePoint( Vector vLoc, Route* oRoute, Int I, Int nNearest, Float vShortDist, Float vDist, NavigationPoint* oNavPoint );
		void SetMovementSpeed();
	};

	class BioSeqAct_ResurrectHenchman: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ResurrectHenchman, SequenceAction, SFXGame )

	public:

		Float PctHealthRegained; //offset = 240, size = 4

		void Activated( WorldInfo* WorldInfo, PlayerController* PC, BioBaseSquad* Squad, Actor* Member, Int idx );
	};

	class BioSeqAct_ReverbPreset: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ReverbPreset, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_ReverbVolume: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ReverbVolume, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_SarenUsePower: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SarenUsePower, SequenceAction, SFXGame )

	public:

		BioPawn* oAttacker; //offset = 240, size = 4
		Actor* oTarget; //offset = 244, size = 4
		Vector vTarget; //offset = 248, size = 12
		Name nmPower; //offset = 260, size = 8

		void Activated();
	};

	class BioSeqAct_SaveCharacter: public BioSeqAct_AutoSave
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SaveCharacter, BioSeqAct_AutoSave, SFXGame )

	public:

		void Activated();
	};

	enum EBioSeqActSelectWeaponLinks
	{
		EBioSeqActSelectWeaponLinks_Success,
		EBioSeqActSelectWeaponLinks_Failure,
	};

	class BioSeqAct_SelectWeapon: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SelectWeapon, SequenceAction, SFXGame )

	public:

		BioPawn* oPawn; //offset = 240, size = 4
		Class* cWeapon; //offset = 244, size = 4

		void Activated( SFXWeapon* Wpn, SFXWeapon* WpnForSwitch, BioWorldInfo* BWI, BioPlayerController* PC );
	};

	class BioSeqAct_SetActionState: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetActionState, SequenceAction, SFXGame )

	public:

		Actor* m_oActor; //offset = 240, size = 4
		Byte m_eActionState; //offset = 244, size = 1

		void Activated( Controller* oController, Pawn* oPawn, PlayerController* oPlayer, BioEpicPawnBehavior* oBehav );
	};

	class BioSeqAct_SetActive: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetActive, SequenceAction, SFXGame )

	public:

		Bool bSetActive: 1; //offset = 240, size = 4

		void Activated( Actor* oTarget );
	};

	class BioSeqAct_SetBase: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetBase, SequenceAction, SFXGame )

	public:

		void Activated( Array<Object*> aChildObjects, Array<Object*> aParentObject, Actor* oParent, Actor* oChild, Int I );
	};

	class BioSeqAct_SetBoolGroup: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetBoolGroup, SequenceAction, SFXGame )

	public:

		Int nBoolGroup; //offset = 240, size = 4
		Int nBoolID; //offset = 244, size = 4
		Bool bSetNotClear: 1; //offset = 248, size = 4

		void Activated( Int nMask );
	};

	class BioSeqAct_SetBrowserWheelAvailable: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetBrowserWheelAvailable, SequenceAction, SFXGame )

	public:

		Bool m_bMakeAvailable: 1; //offset = 240, size = 4

		void Activated( BioWorldInfo* oWorldInfo );
	};

	class BioSeqAct_SetBrowserWheelStateOverrides: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetBrowserWheelStateOverrides, SequenceAction, SFXGame )

	public:

		Array<SubPageState> PageStates; //offset = 240, size = 12

		void Activated( BioWorldInfo* oWorldInfo, SubPageState oStateOverride, Int nIndex );
	};

	struct BioTimer
	{
		OnTimer OnTimer; //offset = 0, size = 12
		Object* Params; //offset = 12, size = 4
		Float fTickTime; //offset = 16, size = 4
		String sTimerName; //offset = 20, size = 12
	};

	class BioTimerList: public Object
	{
		DECLARE_PACKAGE_CLASS( BioTimerList, Object, SFXGame )

	public:

		Array<BioTimer> lstTimers; //offset = 60, size = 12
		__BioTimerDelegate__Delegate __BioTimerDelegate__Delegate; //offset = 72, size = 12

		void Tick( Float fDeltaT, Bool bProcessTick, BioTimer Timer, Float fTickTime );
		Bool KillTimer( String i_sTimerName, Int nIndex, BioTimer Timer );
		void AddTimer( TimerDelegate TimerDelegate, Object* Params, Float fTime, String i_sTimerName, Float fAccumulatedTime, BioTimer Timer, Bool bInserted, Int I );
		void BioTimerDelegate( Object* Params );
	};

	class BioSeqAct_SetBusyState: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetBusyState, SequenceAction, SFXGame )

	public:

		Bool bBusy: 1; //offset = 240, size = 4

		void Activated( Int I, Actor* oTarget, BioActorBehavior* oBehavior );
	};

	class BioSeqAct_SetCanWalkOffLedges: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetCanWalkOffLedges, SequenceAction, SFXGame )

	public:

		Bool m_bCanWalkOffLedges: 1; //offset = 240, size = 4
		Pawn* m_oPawn; //offset = 244, size = 4

		void Activated();
	};

	class BioSeqAct_SetClassification: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetClassification, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_SetExploreCameraRotation: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetExploreCameraRotation, SequenceAction, SFXGame )

	public:

		Actor* oTarget; //offset = 240, size = 4
		Bool bForceInstant: 1; //offset = 244, size = 4

		void Activated( BioWorldInfo* BWI, PlayerController* PC );
		Bool IsCameraExploreMode( SFXCameraMode* pCameraMode );
	};

	class SFXCameraMode_Explore: public SFXCameraMode
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_Explore, SFXCameraMode, SFXGame )

	public:

		void Initialize( BioPlayerController* PC );
	};

	class BioSeqAct_SetFireAtLeanOutMode: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetFireAtLeanOutMode, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_SetInputTrap: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetInputTrap, SequenceAction, SFXGame )

	public:

		Bool m_bSetTrap: 1; //offset = 240, size = 4
		String m_Key; //offset = 244, size = 12

		void Activated();
	};

	class BioSeqAct_SetIsInCombat: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetIsInCombat, SequenceAction, SFXGame )

	public:

		Bool bInCombat: 1; //offset = 240, size = 4

		void Activated( SFXGame* GameInfo );
	};

	class BioSeqAct_SetLookAtTarget: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetLookAtTarget, SequenceAction, SFXGame )

	public:

		Actor* LookAtTarget; //offset = 240, size = 4
		Array<Actor*> Pawns; //offset = 244, size = 12

		void Activated( Actor* Actor, BioPawn* Pawn );
	};

	class BioSeqAct_SetMaterialParameter: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetMaterialParameter, SequenceAction, SFXGame )

	public:

		Name m_nmMaterialParameter; //offset = 240, size = 8

		void Activated( Int I, BioPawn* pPawn );
		void Set( BioPawn* pPawn, Name nmMaterialParameter );
	};

	class BioSeqAct_SetMaterialParameterColor: public BioSeqAct_SetMaterialParameter
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetMaterialParameterColor, BioSeqAct_SetMaterialParameter, SFXGame )

	public:

		Color m_clr; //offset = 248, size = 4

		void Set( BioPawn* pPawn, Name nmMaterialParameter );
	};

	class BioSeqAct_SetMaterialParameterScalar: public BioSeqAct_SetMaterialParameter
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetMaterialParameterScalar, BioSeqAct_SetMaterialParameter, SFXGame )

	public:

		Float m_fScalar; //offset = 248, size = 4

		void Set( BioPawn* pPawn, Name nmMaterialParameter );
	};

	enum EBioSeqActSetOverrideTipTextOutput
	{
		EBioSeqActSetOverrideTipTextOutput_Success,
		EBioSeqActSetOverrideTipTextOutput_Failure,
	};

	enum EBioSeqActSetOverrideTipTextInput
	{
		EBioSeqActSetOverrideTipTextInput_OverrideStringRef,
	};

	class BioSeqAct_SetOverrideTipText: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetOverrideTipText, SequenceAction, SFXGame )

	public:

		m_Override m_Override; //offset = 240, size = 4

		void Activated();
	};

	const char* INDEX_BASE_HENCH = 33;
	const char* INDEX_PARTY_SIZE = 22;
	const char* NUM_HENCH = 12;

	class BioSeqAct_SetPlotPartySize: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetPlotPartySize, SequenceAction, SFXGame )

	public:

		void Activated( Int nPartyCount, BioGlobalVariableTable* gv, Int I, Bool bValue );
		BioWorldInfo* getWorld();
	};

	class BioSeqAct_SetPowerCooldown: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetPowerCooldown, SequenceAction, SFXGame )

	public:

		Pawn* m_oPawn; //offset = 240, size = 4
		Name m_nmPower; //offset = 244, size = 8
		Float m_fCooldownTimeRemaining; //offset = 252, size = 4

		void Activated( Float fTotalCooldownTime, BioPawnBehavior* Behavior, BioPower* Power );
	};

	class BioSeqAct_SetRadarDisplay: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetRadarDisplay, SequenceAction, SFXGame )

	public:

		Actor* m_oActor; //offset = 240, size = 4
		Bool m_bDisabled: 1; //offset = 244, size = 4

		void Activated();
	};

	class BioSeqAct_SetSquadFaction: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetSquadFaction, SequenceAction, SFXGame )

	public:

		Actor* m_oActor; //offset = 240, size = 4
		Class* NewSquadFaction; //offset = 244, size = 4

		void Activated( BioPawn* oPawn, BioBaseSquad* oSquad, BioPlayerController* oPlayer );
	};

	class BioSeqAct_SetStability: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetStability, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_SetTutorialViewed: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SetTutorialViewed, SequenceAction, SFXGame )

	public:

		Name Tutorial; //offset = 240, size = 8

		void Activated();
	};

	class BioSeqAct_ShieldGetAttributes: public Object
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShieldGetAttributes, Object, SFXGame )

	public:
	};

	const char* IT_Finished = 2;
	const char* IT_Populate = 1;

	class BioSFHandler_IntroText: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_IntroText, BioSFHandler, SFXGame )

	public:

		srText srText; //offset = 104, size = 4

		void HandleEvent( Byte nCommand, Array<String> lstArguments, ASParams stParam, Array<ASParams> lstParams );
	};

	class BioSeqAct_ShowLatentTutorial: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowLatentTutorial, BioSequenceLatentAction, SFXGame )

	public:

		Name Tutorial; //offset = 260, size = 8
		Bool bSetViewed: 1; //offset = 268, size = 4

		Bool UpdateOp( Float fDeltaT );
		void Activated();
	};

	class BioSeqAct_ShowMessage: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowMessage, BioSequenceLatentAction, SFXGame )

	public:

		srText srText; //offset = 260, size = 4
		srAButton srAButton; //offset = 264, size = 4
		srBButton srBButton; //offset = 268, size = 4
		Float fDisplayTime; //offset = 272, size = 4
		Byte nIconSet; //offset = 276, size = 1
		Byte m_Skin; //offset = 277, size = 1
		Byte m_TextAlign; //offset = 278, size = 1
		Int nIconIndex; //offset = 280, size = 4
		Bool bNoFade: 1; //offset = 284, size = 4
		Bool m_bFinished: 1; //offset = 284, size = 4
		Bool m_bAPressed: 1; //offset = 284, size = 4
		Bool m_bWasPaused: 1; //offset = 284, size = 4
		Float m_fRemainingDisplayTime; //offset = 288, size = 4

		void MessageBoxUpdate( Float fDeltaT, BioSFHandler_MessageBox* oMsgBox );
		void MessageInputPressed( Bool bAPressed, Int nContext );
		Bool UpdateOp( Float fDeltaT );
		void Activated( BioSFHandler_MessageBox* oMsgBox, BioMessageBoxOptionalParams stParams );
	};

	class BioSeqAct_ShowTutorial: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ShowTutorial, SequenceAction, SFXGame )

	public:

		Name Tutorial; //offset = 240, size = 8
		Bool bSetViewed: 1; //offset = 248, size = 4
		Bool m_bSuccess: 1; //offset = 248, size = 4
		Bool m_bInitiated: 1; //offset = 248, size = 4

		Bool UpdateOp( Float fDeltaT );
		void Activated();
	};

	class BioSeqAct_SoundGroupPitch: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SoundGroupPitch, SequenceAction, SFXGame )

	public:

		Name m_sSoundGroupName; //offset = 240, size = 8
		Float m_fNewPitch; //offset = 248, size = 4
		Bool m_bHasBeenSet: 1; //offset = 252, size = 4
	};

	class BioSeqAct_SoundGroupVolume: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SoundGroupVolume, SequenceAction, SFXGame )

	public:

		Name SoundGroupName; //offset = 240, size = 8
		Float TargetVolume; //offset = 248, size = 4
		Float FadeDuration; //offset = 252, size = 4
	};

	class BioSeqAct_SpawnTacticalArrow: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SpawnTacticalArrow, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_SquadStopHoldingPosition: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SquadStopHoldingPosition, SequenceAction, SFXGame )

	public:

		void Activated();
	};

	const char* NUM_LINKS = 10;

	class BioSeqAct_SwitchWeighted: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_SwitchWeighted, SequenceAction, SFXGame )

	public:

		Float fWeight0; //offset = 240, size = 4
		Float fWeight1; //offset = 244, size = 4
		Float fWeight2; //offset = 248, size = 4
		Float fWeight3; //offset = 252, size = 4
		Float fWeight4; //offset = 256, size = 4
		Float fWeight5; //offset = 260, size = 4
		Float fWeight6; //offset = 264, size = 4
		Float fWeight7; //offset = 268, size = 4
		Float fWeight8; //offset = 272, size = 4
		Float fWeight9; //offset = 276, size = 4
		Float fWeight[10]; //offset = 280, size = 4

		void Activated( Int I, Int nLink, Float fRandom, Float fTotal, Float fTally );
	};

	const char* NUM_HENCH = 12;

	class BioSeqAct_TalkObjSelect: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_TalkObjSelect, SequenceAction, SFXGame )

	public:

		Float f00_Vixen; //offset = 240, size = 4
		Float f01_Leading; //offset = 244, size = 4
		Float f02_Convict; //offset = 248, size = 4
		Float f03_Geth; //offset = 252, size = 4
		Float f04_Thief; //offset = 256, size = 4
		Float f05_Garrus; //offset = 260, size = 4
		Float f06_Assassin; //offset = 264, size = 4
		Float f07_Tali; //offset = 268, size = 4
		Float f08_Professor; //offset = 272, size = 4
		Float f09_Grunt; //offset = 276, size = 4
		Float f10_Mystic; //offset = 280, size = 4
		Float f11_Veteran; //offset = 284, size = 4
		Actor* oPlayer; //offset = 288, size = 4
		Int nHench1; //offset = 292, size = 4
		Int nHench2; //offset = 296, size = 4

		void Activated( Float fPriority, Int nSwap, Int nSquadID1, Int nSquadID2, Pawn* oPlayerPawn, BioBaseSquad* oSquad, Float fHench1Prio, Float fHench2Prio );
		Int GetHenchID( Name Tag, Int Id );
	};

	class BioSeqAct_TempLookAt: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_TempLookAt, SequenceAction, SFXGame )

	public:

		BioPawn* oWho; //offset = 240, size = 4
		Actor* oFocus; //offset = 244, size = 4
		Vector vPoint; //offset = 248, size = 12
		Vector vRelitivePoint; //offset = 260, size = 12

		void Activated();
	};

	class BioSeqAct_ToggleCombat: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ToggleCombat, SequenceAction, SFXGame )

	public:

		Bool m_bEnable: 1; //offset = 240, size = 4

		void Activated( BioPlayerController* oController, BioEpicPawnBehavior* oBehavior );
	};

	class BioSeqAct_ToggleSave: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_ToggleSave, SequenceAction, SFXGame )

	public:

		Bool bEnable: 1; //offset = 240, size = 4
		srReason srReason; //offset = 244, size = 4

		void Activated( BioWorldInfo* oWorldInfo, BioPlayerController* PC );
	};

	class BioSeqAct_UnLockTarget: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_UnLockTarget, SequenceAction, SFXGame )

	public:
	};

	class BioSeqAct_UpdateEndGameStats: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_UpdateEndGameStats, SequenceAction, SFXGame )

	public:

		Bool m_bLogStats: 1; //offset = 240, size = 4
	};

	class BioSeqAct_UpdateTacticianAchievement: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_UpdateTacticianAchievement, SequenceAction, SFXGame )

	public:

		Float m_fDamageRatioRequired; //offset = 240, size = 4
		Int m_nAchievementId; //offset = 244, size = 4

		void Activated( BioWorldInfo* oWorldInfo, BioPlayerController* PC );
	};

	class BioSeqAct_UpgradeVehicle: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( BioSeqAct_UpgradeVehicle, SequenceAction, SFXGame )

	public:
	};

	class BioSeqCond_GetBoolGroup: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( BioSeqCond_GetBoolGroup, SequenceCondition, SFXGame )

	public:

		Int nBoolGroup; //offset = 216, size = 4
		Int nBoolID; //offset = 220, size = 4

		void Activated( Int nMask );
	};

	class BioSeqCond_HasPlaypenVolume: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( BioSeqCond_HasPlaypenVolume, SequenceCondition, SFXGame )

	public:

		Actor* Volume; //offset = 216, size = 4
		Actor* Squad; //offset = 220, size = 4

		void Activated( Int Index, BioBaseSquad* TestSquad );
	};

	class BioSeqCond_InCombat: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( BioSeqCond_InCombat, SequenceCondition, SFXGame )

	public:

		void Activated( SFXGame* GameInfo );
	};

	class BioSeqCond_IsDriving: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( BioSeqCond_IsDriving, SequenceCondition, SFXGame )

	public:
	};

	class BioSeqData_CombatMode: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_CombatMode, BioSeqData, SFXGame )

	public:
	};

	class BioSeqData_MoveAndAttack: public BioSeqData
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_MoveAndAttack, BioSeqData, SFXGame )

	public:
	};

	class BioSeqData_StartFiring: public BioSeqData_ActionBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_StartFiring, BioSeqData_ActionBase, SFXGame )

	public:
	};

	class BioSeqData_UseCover: public BioSeqData_StateBase
	{
		DECLARE_PACKAGE_CLASS( BioSeqData_UseCover, BioSeqData_StateBase, SFXGame )

	public:
	};

	class BioSeqEvt_AllActionsComplete: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_AllActionsComplete, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_KnockoutThorian: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_KnockoutThorian, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_OnLookingAt: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnLookingAt, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_OnNotLookingAt: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnNotLookingAt, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_OnPlaceableStartMoving: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnPlaceableStartMoving, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_OnPlaceableStopMoving: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_OnPlaceableStopMoving, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_PlayerInput: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_PlayerInput, SequenceEvent, SFXGame )

	public:

		Int m_nFilterID; //offset = 280, size = 4
	};

	class BioSeqEvt_VehicleEnter: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_VehicleEnter, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_VehicleExit: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_VehicleExit, SequenceEvent, SFXGame )

	public:
	};

	class BioSeqEvt_VehicleLeaveWorld: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( BioSeqEvt_VehicleLeaveWorld, SequenceEvent, SFXGame )

	public:
	};

	const char* DumpDebug = 6;
	const char* UpdateItemList = 5;
	const char* PrevItem = 4;
	const char* NextItem = 3;
	const char* Initialize = 2;
	const char* CloseAchievement = 1;
	const char* MaxIcons = 8;

	class BioSFHandler_Achievement: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Achievement, BioSFHandler, SFXGame )

	public:

		Int m_nSelectedItemIndex; //offset = 104, size = 4
		Int m_nShiftItemIndex; //offset = 108, size = 4
		Bool m_bFromMainMenu: 1; //offset = 112, size = 4
		srEmpty srEmpty; //offset = 116, size = 4

		void PopulateAchievementItemListEntry( Int nDisplayIndex, BioPlayerController* PC, SFXProfileSettings* Profile, AchievementData Achievement, ASParams stParam, Array<ASParams> lstParams, Bool bEarned );
		void PopulateAchievementItemList( BioPlayerController* PC, SFXProfileSettings* Profile, ASParams stParam, Array<ASParams> lstParams, Int idx );
		void Init( ASParams stParam, Array<ASParams> lstParams );
		void HandleEvent( Byte nCommand, Array<String> lstArguments );
		void SetFromMainMenu();
	};

	const char* CloseGUIs = 2;
	const char* ReturnToBrowserMenu = 1;

	class BioSFHandler_SharedIGG: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_SharedIGG, BioSFHandler, SFXGame )

	public:

		void HandleEvent( Byte nCommand, Array<String> lstArguments );
		void HandleInputEvent( Byte Event, Float fValue );
	};

	const char* DEFAULT_INITIAL_HIDDEN_TIMER = 0.;
	const char* CHARACTER_HANDLER_EVENT_END_SUSPEND = 10;
	const char* CHARACTER_HANDLER_EVENT_PREV_CHARACTER = 8;
	const char* CHARACTER_HANDLER_EVENT_COMMIT = 7;
	const char* CHARACTER_HANDLER_EVENT_CANCEL = 6;
	const char* CHARACTER_HANDLER_EVENT_PURCHASE_TALENT_RANK = 4;
	const char* CHARACTER_HANDLER_EVENT_AUTO_LEVEL_UP = 3;
	const char* CHARACTER_HANDLER_EVENT_NEXT_CHARACTER = 2;
	const char* CHARACTER_HANDLER_EVENT_INITIALIZE = 1;

	enum PowerRankState
	{
		POWER_RANK_STATE_LOCKED,
		POWER_RANK_STATE_BUYABLE,
	};

	class BioSFHandler_CharacterRecord2: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_CharacterRecord2, BioSFHandler, SFXGame )

	public:

		Int m_nMaxRenegade; //offset = 104, size = 4
		Int m_nMaxParagon; //offset = 108, size = 4
		Array<Float> m_ParagonRenegadeBarValues; //offset = 112, size = 12
		BioWorldInfo* m_WorldInfo; //offset = 124, size = 4
		Int m_CurrentPawnIndex; //offset = 128, size = 4
		Float m_fScrollValue; //offset = 132, size = 4
		Bool m_bCloseGUIButtonPressed: 1; //offset = 136, size = 4
		Array<m_SquadNames> m_SquadNames; //offset = 140, size = 12
		SFXPowerLevelUpHelper* m_Helper; //offset = 152, size = 4
		Array<Texture*> m_SquadIcons; //offset = 156, size = 12
		Array<Int> m_bPowerLockedStatus; //offset = 168, size = 12
		Array<BioPawn*> m_SpawnedSquadMembersSource; //offset = 180, size = 12
		Float m_InitialHiddenTimer; //offset = 192, size = 4
		m_srXPFormat m_srXPFormat; //offset = 196, size = 4
		m_srSpendTalentPointsMessageXBox m_srSpendTalentPointsMessageXBox; //offset = 200, size = 4
		m_srParagonRenegadeMessageXBox m_srParagonRenegadeMessageXBox; //offset = 204, size = 4
		m_srSpendTalentPointsMessagePC m_srSpendTalentPointsMessagePC; //offset = 208, size = 4
		m_srParagonRenegadeMessagePC m_srParagonRenegadeMessagePC; //offset = 212, size = 4
		m_srSpendTalentPointsMessagePS3 m_srSpendTalentPointsMessagePS3; //offset = 216, size = 4
		m_srParagonRenegadeMessagePS3 m_srParagonRenegadeMessagePS3; //offset = 220, size = 4
		m_srOk m_srOk; //offset = 224, size = 4
		m_srShepardLevelClassFormat m_srShepardLevelClassFormat; //offset = 228, size = 4
		m_srTalentDescriptionFormat m_srTalentDescriptionFormat; //offset = 232, size = 4
		m_srRankDescriptionFormat m_srRankDescriptionFormat; //offset = 236, size = 4
		m_srFaceCodeFormat m_srFaceCodeFormat; //offset = 240, size = 4
		__OnCloseCallback__Delegate __OnCloseCallback__Delegate; //offset = 244, size = 12

		void AdditionalShutdownHandling();
		void CancelEvolution( SFXPower* OriginalPower );
		void EvolvePower( SFXPower* OriginalPower, Class* EvolvedPowerClass, Int nIndex, SFXPower* Power, ASParams CurrentParameter, Array<ASParams> Parameters, Int nEvolvedPowerIndex );
		void CancelChanges();
		void GetSquadMemberNamesAndIcons( srCurrentMember srCurrentMember, srPreviousMember srPreviousMember, srNextMember srNextMember, Texture* NextMemberIcon, Texture* PrevMemberIcon );
		Bool GetExperienceProgress( Int CurrentXP, Int TargetXP, PlayerController* PC, SFXPawn_Player* Player, SFXGame* GameInfo );
		void UpdatePoints( ASParams CurrentParameter, Array<ASParams> Parameters );
		void UpdatePowerRanks( Int nPowerIndex, Int nRankIndex, ASParams CurrentParameter, Array<ASParams> Parameters, SFXPower* Power, Int nAvailableRank, String sDescription, String sUnlockDetails, String sUnlockDetailsSeperator );
		void UpdatePowerList( Int nIndex, ASParams CurrentParameter, Array<ASParams> Parameters, SFXPower* Power, Bool bUnlocked, Int nNewUnlockedPower, String sDescription, String sUnlockDetails, String sUnlockDetailsSeperator );
		void CreatePowerList( Int nIndex, ASParams CurrentParameter, Array<ASParams> Parameters, SFXPower* Power );
		Float FloorEx( Float Value, Float Result );
		void UpdateParagonRenegadeValues( Bool bAnimate, ASParams CurrentParameter, Array<ASParams> Parameters, SFXPawn_Player* PlayerPawn, SFXGame* Game, Float CharmPercentage, Float IntimidatePercentage );
		void GetParagonRenegadePercentage( SFXPawn_Player* PlayerPawn, Float ParagonPercent, Float RenegadePercent, Int Index, Float TotalCharmBarValue, Float TotalIntimidateBarValue, Float CharmSkill, Float IntimidateSkill, BioPawnBehavior* Behavior, Float DisplayBarValue );
		void UpdateCharacterStats( BioAttributesPawn* Attributes, Int PlayerLevel, ASParams CurrentParameter, Array<ASParams> Parameters, srCurrent srCurrent, srNext srNext, srPrevious srPrevious, Bool bShowPrevious, Bool bShowNext, SFXPawn_Player* PlayerPawn, SFXGame* Game, Texture* henchIcon1, Texture* henchIcon2, SFXPawn_Henchman* oPawn, Int nMaxHealth, Int nMaxShields, Int nXP_NextLevel, Int nXP_Current, String sShieldsTitle, String sXP, String sFaceCode, String sPlayerClass, BioPlayerController* oController, SFXEngine* oEngine );
		void UpdateAll( ASParams CurrentParameter, Array<ASParams> Parameters );
		void CleanupCharacter();
		void PurchasePowerRank( Int nPowerIndex, ASParams CurrentParameter, Array<ASParams> Parameters, MassEffectGuiManager* GUIManager );
		void AutoLevelUp();
		Bool ChangeToCharacter( BioPawn* NextCharacter, ASParams CurrentParameter, Array<ASParams> Parameters );
		Bool NextCharacter( Bool bNext, BioPawn* NextPawn, Int nNextPawnIndex );
		Bool InitializeCharacterRecord(, Int nIndex, Int nSquadSize, BioPawn* oPawnToStartGUIWith, BioPawn* oPawn, srName srName, Array<ASParams> lstParams, ASParams stParam, Texture* henchIcon );
		void Callback_ClosedTalentMsgBox( Bool bAPressed, Int Context, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams stParams, srMessage srMessage );
		void OnPanelAdded( SFXGame* oGame, BioSFHandler_MessageBox* MessageBox, BioMessageBoxOptionalParams stParams, srMessage srMessage );
		void OnPanelRemoved( BioPawn* SourcePawn );
		void Update( Float fDeltaT, ASParams stParam, Array<ASParams> lstParams );
		void ProcessRStickAxisInput( Float fValue );
		void HandleInputEvent( Byte Event, Float fValue );
		void HandleEvent( Byte nCommand, Array<String> Parameters );
		void SetOnCloseCallback( fn_OnCloseDelegate fn_OnCloseDelegate );
		void OnCloseCallback();
	};

	const char* SPECIALIZATION_HANDLER_EVENT_CANCEL_SPECIALIZATION = 3;
	const char* SPECIALIZATION_HANDLER_EVENT_INITIALIZE = 2;
	const char* SPECIALIZATION_HANDLER_EVENT_CHOOSE_SPECIALIZATION = 1;

	class BioSFHandler_Specialization: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_Specialization, BioSFHandler, SFXGame )

	public:

		m_Description m_Description; //offset = 104, size = 4
		Float m_fRScrollValue; //offset = 108, size = 4
		SFXPower* m_OriginalPower; //offset = 112, size = 4
		SFXPower* m_EvolvedPower1; //offset = 116, size = 4
		SFXPower* m_EvolvedPower2; //offset = 120, size = 4
		__EvolvePowerDelegate__Delegate __EvolvePowerDelegate__Delegate; //offset = 124, size = 12
		__CancelEvolutionDelegate__Delegate __CancelEvolutionDelegate__Delegate; //offset = 136, size = 12

		void CancelEvolution();
		void EvolvePower( Int nIndex );
		void UpdatePowerList( ASParams CurrentParameter, Array<ASParams> Parameters );
		void Update( Float fDeltaT, ASParams stParam, Array<ASParams> lstParams );
		void HandleInputEvent( Byte Event, Float fValue );
		void HandleEvent( Byte nCommand, Array<String> Parameters );
		void OnPanelRemoved();
		void OnPanelAdded();
		Bool Initialize( BioPawn* oPawn, Name nmPowerName );
		void CancelEvolutionDelegate( SFXPower* OriginalPower );
		void EvolvePowerDelegate( SFXPower* OriginalPower, Class* EvolvedPowerClass );
	};

	class BioSFHandler_DeviceSelection: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_DeviceSelection, BioSFHandler, SFXGame )

	public:
	};

	class BioSFHandler_SaveLoadBase: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_SaveLoadBase, BioSFHandler, SFXGame )

	public:

		String gfxFunc_SetLoadSave; //offset = 104, size = 12
		String gfxFunc_StartSlotList; //offset = 116, size = 12
		String gfxFunc_AddEntry; //offset = 128, size = 12
		String gfxFunc_UpdateActiveCharacterData; //offset = 140, size = 12
		String gfxFunc_AddCharacterEntry; //offset = 152, size = 12
	};

	class BioSFHandler_LoadGame: public BioSFHandler_SaveLoadBase
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_LoadGame, BioSFHandler_SaveLoadBase, SFXGame )

	public:

		String m_sDeleteCharId; //offset = 164, size = 12
		BioSFHandler_MessageBox* m_oLoadGuiMessageBoxHandler; //offset = 176, size = 4

		void OnPanelRemoved();
	};

	enum SFXAreaMapLayout
	{
		AM_Biop_twrhub,
		AM_Biop_cithub,
		AM_Biop_omghub,
		AM_Biop_krohub,
		AM_Biop_nor,
	};

	class SFXAreaMapData: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXAreaMapData, Object, SFXGame )

	public:

		Byte MapLayout; //offset = 60, size = 1
		Texture2D* MapAsset; //offset = 64, size = 4
		Vector RefPoint1_Image_Px; //offset = 68, size = 12
		Vector RefPoint1_Unreal_UU; //offset = 80, size = 12
		Vector RefPoint2_Image_Px; //offset = 92, size = 12
		Vector RefPoint2_Unreal_UU; //offset = 104, size = 12
		Float PxPerUU; //offset = 116, size = 4
		Vector UUCoorAtPxOrigin; //offset = 120, size = 12

		void GetPixelCoordinates( Float UU_X, Float UU_Y, Float Px, Float Py );
		void ReCalculate( Float UUX_AtPxOrg, Float UUY_AtPxOrg );
		void GetUUCordAtPxOrigin( Float UU_X, Float UU_Y, Float ScalePxPerUU, Float PxXAsUU, Float PxYAsUU );
		Float GetPxPerUU(, Vector RefpxToRefpx, Vector RefUToRefU, Float DistPx, Float DistUU, Float Scale );
	};

	const char* VETERAN_DOWNLOADED = 228;
	const char* THIEF_DOWNLOADED = 228;
	const char* GetInfo = 5;
	const char* Conflict = 4;
	const char* SetAppearance = 3;
	const char* SelectParty = 2;
	const char* InitializeParty = 1;

	enum CharacterSelectState
	{
		CharSel_Unknown,
		CharSel_Discovered,
		CharSel_Available,
		CharSel_InParty,
		CharSel_Forced,
	};

	struct PartySelectDynamicInfo
	{
		Int Abilities[5]; //offset = 0, size = 4
		Int Ranks[5]; //offset = 20, size = 4
		Int Weapons[3]; //offset = 40, size = 4
	};

	struct AdditionalAppearanceInfo
	{
		Name Tag; //offset = 0, size = 8
		Int AddAppearance; //offset = 8, size = 4
		Int PlotFlag; //offset = 12, size = 4
	};

	struct PartySelectMemberInfo
	{
		Name Tag; //offset = 0, size = 8
		Name LoadoutTag; //offset = 8, size = 8
		Int StrName; //offset = 16, size = 4
		Int ImageIndex; //offset = 20, size = 4
		Int KismetIndex; //offset = 24, size = 4
		Name DiscoveredLabel; //offset = 28, size = 8
		Name AvailableLabel; //offset = 36, size = 8
		Name InPartyLabel; //offset = 44, size = 8
		Name IsLoyalLabel; //offset = 52, size = 8
		Name IsSpecializedLabel; //offset = 60, size = 8
		Name OldLoyaltyLabel; //offset = 68, size = 8
		Name AppearanceLabel; //offset = 76, size = 8
		Int DeadIndex; //offset = 84, size = 4
		Int StrDossierText; //offset = 88, size = 4
		Int StrSpecialty; //offset = 92, size = 4
	};

	class BioSFHandler_PartySelection: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PartySelection, BioSFHandler, SFXGame )

	public:

		Bool m_bNoSelectMode: 1; //offset = 104, size = 4
		Bool m_bSFScreenInitialized: 1; //offset = 104, size = 4
		Array<PartySelectMemberInfo> lstMemberInfo; //offset = 108, size = 12
		Array<AdditionalAppearanceInfo> lstAppearances; //offset = 120, size = 12
		srPartyConfirm srPartyConfirm; //offset = 132, size = 4
		srPartyCancel srPartyCancel; //offset = 136, size = 4
		srPartyQuestion srPartyQuestion; //offset = 140, size = 4
		Name nmFireTeamLeaderLabel; //offset = 144, size = 8
		Name nmSpecialistLabel; //offset = 152, size = 8
		Name m_nmMorinthPlotState; //offset = 160, size = 8
		Int m_nStrMorinthName; //offset = 168, size = 4
		Array<PartySelectDynamicInfo> lstDynamicInfo; //offset = 172, size = 12
		Name nmForcedHenchman; //offset = 184, size = 8
		Int m_nPartyMember1; //offset = 192, size = 4
		Int m_nPartyMember2; //offset = 196, size = 4
		__ExternalCallback_OnComplete__Delegate __ExternalCallback_OnComplete__Delegate; //offset = 200, size = 12

		void ExitScreen();
		void FinalizeParty( Bool bAPressed, Int nContext, BioGlobalVariableTable* oGV );
		void ConfirmParty( BioSFHandler_MessageBox* oMsgBox, BioMessageBoxOptionalParams stParams );
		void DoInitialization( Array<ASParams> lstParams, ASParams stParam, BioGlobalVariableTable* oGV, BioWorldInfo* oBioWorld, Bool bNeed12Henchmen, Int nHench, Bool bSelected, Bool bDiscovered, Bool bAvailable, Bool bRequired, Bool bRequiredByScript, Bool bRequiredByPlot, Bool bLoyal, Bool bWasLoyal, Bool bDead, Bool bInFireTeam, Bool bIsSpecialist, Bool bIsNotDownloaded, Int nAppearanceMask, Int nAppearance, Int nState, Int nConflictMask, Int nStrName );
		void SendInfo( Int nChar, Array<ASParams> lstParams, ASParams stParam, Int I );
		void SetInfo( Name nmTag, SFXPlayerSquadLoadoutData* oLoadout, Int nChar, Int nSlot, Int nPower, Int nLoadoutPower, Int nExistingPower, Class* cPower, Class* cEvolvedPower, BioPlayerController* PC, SFXEngine* Engine, Int idx, HenchmanSaveRecord oHenchData );
		void PlayConflict( Int nChar1, Int nChar2 );
		void SetCharacterAppearance( Int nChar, Int nAppearance, BioGlobalVariableTable* oGV );
		void HandleEvent( Byte nCommand, Array<String> lstArguments, SFXEngine* Engine, BioPlayerController* PC );
		void OnPanelRemoved();
		void OnPanelAdded();
		void ClearDelegates();
		void SetExternalCallback_OnComplete( pDelegate pDelegate );
		void ExternalCallback_OnComplete();
	};

	class BioSFHandler_PCAchievement: public BioSFHandler_Achievement
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCAchievement, BioSFHandler_Achievement, SFXGame )

	public:

		void OnPanelAdded();
	};

	class BioSFHandler_PCCharacterRecord2: public BioSFHandler_CharacterRecord2
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCCharacterRecord2, BioSFHandler_CharacterRecord2, SFXGame )

	public:

		void ProcessRStickAxisInput( Float fValue );
		void OnPanelAdded();
	};

	class BioSFHandler_PCChoiceGUI: public BioSFHandler_ChoiceGUI
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCChoiceGUI, BioSFHandler_ChoiceGUI, SFXGame )

	public:

		void ScrollText( Float fValue );
		void OnPanelAdded();
	};

	class BioSFHandler_PCConversation: public BioSFHandler_Conversation
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCConversation, BioSFHandler_Conversation, SFXGame )

	public:

		Vector vMouseInput; //offset = 256, size = 12
		Float AccumulationDivisor; //offset = 268, size = 4
		Bool m_bEnforce16x9: 1; //offset = 272, size = 4

		void Enforce16x9( Bool bVal );
		void Update( Float fDeltaT, BioPlayerController* PC );
		void CalculateArrowPosition( ASParams stParam, Array<ASParams> lstParams, Vector vMouseAngle, Rotator R );
		void HighlightDefaultConvSegment();
		void HandleInputEvent( Byte Event, Float fValue );
		void OnPanelAdded( ASParams stParam, Array<ASParams> lstParams );
	};

	class BioSFHandler_PCCredits: public BioSFHandler_Credits
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCCredits, BioSFHandler_Credits, SFXGame )

	public:

		void HandleInputEvent( Byte Event, Float fValue );
	};

	class BioSFHandler_PCDataCodex: public BioSFHandler_DataCodex
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCDataCodex, BioSFHandler_DataCodex, SFXGame )

	public:

		void OnPanelAdded();
	};

	class BioSFHandler_PCGameOver: public BioSFHandler_GameOver
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCGameOver, BioSFHandler_GameOver, SFXGame )

	public:

		void OnPanelAdded();
	};

	class BioSFHandler_PCJournal: public BioSFHandler_Journal
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCJournal, BioSFHandler_Journal, SFXGame )

	public:

		void OnPanelAdded();
	};

	class BioSFHandler_PCLoadGame: public BioSFHandler_LoadGame
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCLoadGame, BioSFHandler_LoadGame, SFXGame )

	public:

		void OnPanelAdded();
	};

	class BioSFHandler_PCPartySelection: public BioSFHandler_PartySelection
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCPartySelection, BioSFHandler_PartySelection, SFXGame )

	public:

		void Update( Float fDeltaT );
		void OnPanelAdded();
	};

	class BioSFHandler_SaveGame: public BioSFHandler_SaveLoadBase
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_SaveGame, BioSFHandler_SaveLoadBase, SFXGame )

	public:

		Float fUpdateTimer; //offset = 164, size = 4
		BioSFHandler_MessageBox* m_oSaveGuiMessageBoxHandler; //offset = 168, size = 4

		void OnPanelRemoved();
		void OnPanelAdded();
		void DeleteGameConfirm( Bool bAPressed, Int nContext );
	};

	class BioSFHandler_PCSaveGame: public BioSFHandler_SaveGame
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCSaveGame, BioSFHandler_SaveGame, SFXGame )

	public:

		void OnPanelAdded();
	};

	class BioSFHandler_PCSpecialization: public BioSFHandler_Specialization
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_PCSpecialization, BioSFHandler_Specialization, SFXGame )

	public:
	};

	const char* CloseConfirm = 9;
	const char* DeleteCharacterConfirm = 8;
	const char* NewCharacter = 7;
	const char* back = 6;
	const char* PrevCharacter = 5;
	const char* NextCharacter = 4;
	const char* ResumeGame = 3;
	const char* DeleteCharacter = 2;
	const char* InitializeSelectCharacter = 1;

	class BioSFHandler_SelectCharacter: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_SelectCharacter, BioSFHandler, SFXGame )

	public:

		void UpdateCharacterData( ASParams stParam, Array<ASParams> lstParams );
		Bool DoCharactersExist();
		void HandleEvent( Byte nCommand, Array<String> lstArguments, BioSFHandler_NewCharacter* oNCHandler, BioSFPanel* oNewPanel );
	};

	class BioSFHandler_SniperOverlay: public BioSFHandler
	{
		DECLARE_PACKAGE_CLASS( BioSFHandler_SniperOverlay, BioSFHandler, SFXGame )

	public:

		void SetDistance( Int nDistance, ASParams stParam, Array<ASParams> lstParams );
	};

	class BioSkillGame_Bypass_PCHandler: public BioSkillGame_Bypass_Handler
	{
		DECLARE_PACKAGE_CLASS( BioSkillGame_Bypass_PCHandler, BioSkillGame_Bypass_Handler, SFXGame )

	public:
	};

	class BioSkillGame_Decryption_PCHandler: public BioSkillGame_Decryption_Handler
	{
		DECLARE_PACKAGE_CLASS( BioSkillGame_Decryption_PCHandler, BioSkillGame_Decryption_Handler, SFXGame )

	public:

		void OnPanelAdded();
	};

	class BioSkillMap: public Object
	{
		DECLARE_PACKAGE_CLASS( BioSkillMap, Object, SFXGame )

	public:

		Array<Name> SkillToStateMap; //offset = 60, size = 12
		Bool m_bClosedIsSkillState: 1; //offset = 72, size = 4

		Bool IsSkillInMap( Name Skill, Int I );
		Name GetSkill( Int Num );
	};

	class BioSkillMap_Door: public BioSkillMap
	{
		DECLARE_PACKAGE_CLASS( BioSkillMap_Door, BioSkillMap, SFXGame )

	public:
	};

	class BioSkillMap_Test: public BioSkillMap
	{
		DECLARE_PACKAGE_CLASS( BioSkillMap_Test, BioSkillMap, SFXGame )

	public:
	};

	class BioSoundNode_Base: public SoundNode
	{
		DECLARE_PACKAGE_CLASS( BioSoundNode_Base, SoundNode, SFXGame )

	public:
	};

	class BioSoundNodeAPActivity: public BioSoundNode_Base
	{
		DECLARE_PACKAGE_CLASS( BioSoundNodeAPActivity, BioSoundNode_Base, SFXGame )

	public:
	};

	class BioSoundNodeAPState: public BioSoundNode_Base
	{
		DECLARE_PACKAGE_CLASS( BioSoundNodeAPState, BioSoundNode_Base, SFXGame )

	public:
	};

	class BioSoundNodeAPTransition: public BioSoundNode_Base
	{
		DECLARE_PACKAGE_CLASS( BioSoundNodeAPTransition, BioSoundNode_Base, SFXGame )

	public:
	};

	class BioSoundNodeFootsteps: public BioSoundNode_Base
	{
		DECLARE_PACKAGE_CLASS( BioSoundNodeFootsteps, BioSoundNode_Base, SFXGame )

	public:
	};

	class BioSpawnPoint: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioSpawnPoint, Actor, SFXGame )

	public:
	};

	class BioSpawnPointVehicle: public BioSpawnPoint
	{
		DECLARE_PACKAGE_CLASS( BioSpawnPointVehicle, BioSpawnPoint, SFXGame )

	public:
	};

	class BioSpectatorMode: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioSpectatorMode, BioBaseComponent, SFXGame )

	public:

		String m_desc; //offset = 68, size = 12
		Int m_nCurrentLevel; //offset = 80, size = 4
		Int m_nSelectedOption; //offset = 84, size = 4
		Array<String> m_options; //offset = 88, size = 12
		Int m_nSelectedSubOption; //offset = 100, size = 4
		Array<String> m_subOptions; //offset = 104, size = 12

		void NextOption();
		void PrevOption();
		String GetBelowOptionText( Int Level );
		String GetSelectedOptionText( Int Level );
		String GetAboveOptionText( Int Level );
		void DeactivateOption( BioWorldInfo* WorldInfo );
		void ActivateOption( BioWorldInfo* WorldInfo );
		void InitializeOptions( BioWorldInfo* WorldInfo );
	};

	class BioSpectator: public BioBaseComponent
	{
		DECLARE_PACKAGE_CLASS( BioSpectator, BioBaseComponent, SFXGame )

	public:

		Int m_nSelectedMode; //offset = 68, size = 4
		Array<BioSpectatorMode*> m_modes; //offset = 72, size = 12
		BioWorldInfo* m_WorldInfo; //offset = 84, size = 4

		void NextMode();
		void PrevMode();
		void InitializeModes( BioWorldInfo* WorldInfo, Actor* Target );
	};

	class BioSpectatorModeState: public BioSpectatorMode
	{
		DECLARE_PACKAGE_CLASS( BioSpectatorModeState, BioSpectatorMode, SFXGame )

	public:

		void ActivateOption( BioWorldInfo* WorldInfo, Actor* Target, Int I, BioState* BS );
		void InitializeOptions( BioWorldInfo* WorldInfo, Actor* Target, Int I, BioState* BS );
	};

	class BioSpectatorModeAnim: public BioSpectatorMode
	{
		DECLARE_PACKAGE_CLASS( BioSpectatorModeAnim, BioSpectatorMode, SFXGame )

	public:

		void ActivateOption( BioWorldInfo* WorldInfo, Actor* Target, AnimNodeSequence* AnimSeq, AnimTree* AnimTree, AnimSet* Set, Bio_Appr_Character* Appearance, Int I, Int J );
		void InitializeOptions( BioWorldInfo* WorldInfo, Int I, Actor* Target, AnimSet* Set, Bio_Appr_Character* Appearance );
	};

	class BioSpectatorModeAnimSpeed: public BioSpectatorMode
	{
		DECLARE_PACKAGE_CLASS( BioSpectatorModeAnimSpeed, BioSpectatorMode, SFXGame )

	public:

		void ActivateOption( BioWorldInfo* WorldInfo );
		void InitializeOptions( BioWorldInfo* WorldInfo, Int I );
	};

	class BioSpectatorModeLOD: public BioSpectatorMode
	{
		DECLARE_PACKAGE_CLASS( BioSpectatorModeLOD, BioSpectatorMode, SFXGame )

	public:

		void ActivateOption( BioWorldInfo* WorldInfo, Actor* Target );
		void InitializeOptions( BioWorldInfo* WorldInfo, Actor* Target, Int I );
	};

	class BioSpectatorModeCamera: public BioSpectatorMode
	{
		DECLARE_PACKAGE_CLASS( BioSpectatorModeCamera, BioSpectatorMode, SFXGame )

	public:
	};

	class BioSpectatorModeAppr: public BioSpectatorMode
	{
		DECLARE_PACKAGE_CLASS( BioSpectatorModeAppr, BioSpectatorMode, SFXGame )

	public:
	};


	class SFXDroppedAmmo: public DroppedPickup
	{
		DECLARE_PACKAGE_CLASS( SFXDroppedAmmo, DroppedPickup, SFXGame )

	public:
		struct Pickup
		{
			/*
			CheckTouching
			RecheckValidTouch
			ValidTouch
			CheckPlayerFull
			BeginState
			*/
		};

		StaticMeshComponent* AmmoMesh; //offset = 524, size = 4
		WwiseEvent* AmmoPickupSound; //offset = 528, size = 4
		MaterialInterface* Clip_MM; //offset = 532, size = 4
		MaterialInterface* Clip_MM_Disabled; //offset = 536, size = 4
		Bool bIsDisabled: 1; //offset = 540, size = 4
		Bool bDecays: 1; //offset = 540, size = 4
		Bool bPooled: 1; //offset = 540, size = 4
		Name PlayerNameCache; //offset = 544, size = 8

		void UnTouch( Actor* Other );
		void Reuse();
		void Recycle();
		void Tick( Float DeltaTime );
		void PickedUpBy( Pawn* P );
		void EncroachedBy( Actor* Other );
		void Reset();
		void Landed( Vector HitNormal, Actor* FloorActor );
		void SetCollisionCylinderSize( Float CollisionRadius, Float CollisionHeight, CylinderComponent* Comp );
		void GiveTo( Pawn* P );
		Bool GiveAmmo( InventoryManager* InvManager, Float fBonusAmmo, SFXWeapon* Weapon, Float StarvRtg, Float AmmoPctToGive, Int AmmoToGive, Bool bAcquiredAmmo );
		Bool ShouldDropAmmo( SFXWeapon* Weapon, PlayerController* PC, Float StarvRtg, Float ChanceToDrop, Pawn* OwnerPawn, NavigationPoint* Nav, NavigationPoint* OwnerAnchor, Float DistToAnchor, Float fRoll );
		Float GetUsedAmmoPct( InventoryManager* InvManager, Bool bCountAmmoInMagazine, SFXWeapon* Weapon, Float UsedPct, Float WpnUsedPct, Int NumWeapons, Int AmmoUsed, Int MaxAmmo );
		Bool CanPickUpAmmo( InventoryManager* InvManager, SFXWeapon* oWeapon );
		Float CalculateAmmoStarvation( InventoryManager* InvManager, SFXWeapon* Weapon, Float StarvedRating, Int NumWeapons, Float AmmoUsed, Float MaxAmmo, Float MostStarved, Float NextMostStarved );
	};

	class BioStartPoint: public NavigationPoint
	{
		DECLARE_PACKAGE_CLASS( BioStartPoint, NavigationPoint, SFXGame )

	public:
	};

	class BioStartLocation: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioStartLocation, Actor, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveHeadShotBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveHeadShotBonus, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_NonCoverDamageResistBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_NonCoverDamageResistBonus, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_DamageImmunity: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_DamageImmunity, SFXGameEffect, SFXGame )

	public:

		void OnRemoved();
		void OnApplied();
	};

	class SFXSeqEvt_CombatStarted: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_CombatStarted, SequenceEvent, SFXGame )

	public:
	};

	class SFXSeqEvt_CombatEnded: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_CombatEnded, SequenceEvent, SFXGame )

	public:
	};

	class BioTempNavPoint: public NavigationPoint
	{
		DECLARE_PACKAGE_CLASS( BioTempNavPoint, NavigationPoint, SFXGame )

	public:
	};

	struct TwitchRec
	{
		Int nTwitchAnim; //offset = 0, size = 4
		Float fDelay; //offset = 4, size = 4
	};

	class BioTimedActivity: public BioBaseActivity
	{
		DECLARE_PACKAGE_CLASS( BioTimedActivity, BioBaseActivity, SFXGame )

	public:

		Array<TwitchRec> m_aTwitchAnims; //offset = 96, size = 12
	};

	class BioTriggerActorFactory: public ActorFactory
	{
		DECLARE_PACKAGE_CLASS( BioTriggerActorFactory, ActorFactory, SFXGame )

	public:
	};

	class BioTriggerVolume: public TriggerVolume
	{
		DECLARE_PACKAGE_CLASS( BioTriggerVolume, TriggerVolume, SFXGame )

	public:

		Bool Enabled: 1; //offset = 568, size = 4
		Bool OneShot: 1; //offset = 568, size = 4

		void UnTouch( Actor* Other );
		void Touch( Actor* Other, PrimitiveComponent* OtherComp, Vector HitLocation, Vector HitNormal );
	};

	class BioVehicleBehaviorSaveObject: public BioEpicPawnBehaviorSaveObject
	{
		DECLARE_PACKAGE_CLASS( BioVehicleBehaviorSaveObject, BioEpicPawnBehaviorSaveObject, SFXGame )

	public:

		String m_ActorType; //offset = 100, size = 12

		void LoadObject( Object* O );
		void SaveObject( Object* O );
	};

	class BioVehicleWheeledType: public BioVehicleBaseType
	{
		DECLARE_PACKAGE_CLASS( BioVehicleWheeledType, BioVehicleBaseType, SFXGame )

	public:
	};

	class BioVFXInterface: public Object
	{
		DECLARE_PACKAGE_CLASS( BioVFXInterface, Object, SFXGame )

	public:
	};

	class BioVFXInterfacePawn: public BioVFXInterface
	{
		DECLARE_PACKAGE_CLASS( BioVFXInterfacePawn, BioVFXInterface, SFXGame )

	public:
	};

	class BioVISFootstep: public BioVISSimple
	{
		DECLARE_PACKAGE_CLASS( BioVISFootstep, BioVISSimple, SFXGame )

	public:
	};

	class BioVisualEffectObserverActor: public Object
	{
		DECLARE_PACKAGE_CLASS( BioVisualEffectObserverActor, Object, SFXGame )

	public:
	};

	class BioVISXModSet: public BioVisualImpactSet
	{
		DECLARE_PACKAGE_CLASS( BioVISXModSet, BioVisualImpactSet, SFXGame )

	public:
	};

	class BioWaypointSetFactory: public ActorFactory
	{
		DECLARE_PACKAGE_CLASS( BioWaypointSetFactory, ActorFactory, SFXGame )

	public:
	};

	class BioWeaponSoundsSet: public Object
	{
		DECLARE_PACKAGE_CLASS( BioWeaponSoundsSet, Object, SFXGame )

	public:
	};

	class SFXGameEffect_ResearchCostMultiplier: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_ResearchCostMultiplier, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class BioWorldInfoTick: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioWorldInfoTick, Actor, SFXGame )

	public:

		void Tick( Float fDeltaT );
	};

	class BioWorldInteraction: public Actor
	{
		DECLARE_PACKAGE_CLASS( BioWorldInteraction, Actor, SFXGame )

	public:

		Array<AnimSet*> m_oBaseAnimSets; //offset = 508, size = 12
		Array<AnimSet*> m_oConversationAnimSets; //offset = 520, size = 12
		Array<BioBaseActivity*> m_aoActivities; //offset = 532, size = 12
	};

	class BioWP_AirAssault: public BioWP_AirPoint
	{
		DECLARE_PACKAGE_CLASS( BioWP_AirAssault, BioWP_AirPoint, SFXGame )

	public:
	};

	class BioWp_AirDefense: public BioWP_AirPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_AirDefense, BioWP_AirPoint, SFXGame )

	public:
	};

	class BioWp_AssaultPoint: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_AssaultPoint, BioPathPoint, SFXGame )

	public:
	};

	class BioWp_ChangeRoute: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_ChangeRoute, BioPathPoint, SFXGame )

	public:

		Name PathToWalk; //offset = 780, size = 8
		Byte WalkType; //offset = 788, size = 1
		Bool Walking: 1; //offset = 792, size = 4
		Float MoveTolerance; //offset = 796, size = 4
		Int StartAtWaypoint; //offset = 800, size = 4

		Bool OnCreatureReachedWayPoint( Pawn* PathFindingCreature );
	};

	class BioWp_Cover: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_Cover, BioPathPoint, SFXGame )

	public:

		BioArtPlaceable* oCoveringobject; //offset = 780, size = 4
	};

	class BioWp_DefensePoint: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_DefensePoint, BioPathPoint, SFXGame )

	public:
	};

	class BioWp_Delay: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_Delay, BioPathPoint, SFXGame )

	public:

		Float DelayInSeconds; //offset = 780, size = 4

		Bool OnCreatureReachedWayPoint( Pawn* PathFindingCreature );
	};

	class BioWp_GuardPost: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_GuardPost, BioPathPoint, SFXGame )

	public:
	};

	class BioWP_Hopper: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWP_Hopper, BioPathPoint, SFXGame )

	public:
	};

	class BioWP_HopperCeiling: public BioWP_Hopper
	{
		DECLARE_PACKAGE_CLASS( BioWP_HopperCeiling, BioWP_Hopper, SFXGame )

	public:
	};

	class BioWP_HopperFloor: public BioWP_Hopper
	{
		DECLARE_PACKAGE_CLASS( BioWP_HopperFloor, BioWP_Hopper, SFXGame )

	public:
	};

	class BioWP_HopperWall: public BioWP_Hopper
	{
		DECLARE_PACKAGE_CLASS( BioWP_HopperWall, BioWP_Hopper, SFXGame )

	public:
	};

	class BioWp_Kismet: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_Kismet, BioPathPoint, SFXGame )

	public:

		Bool OnCreatureReachedWayPoint( Pawn* PathFindingCreature );
	};

	class BioWp_PlayAnim: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_PlayAnim, BioPathPoint, SFXGame )

	public:

		Array<Name> Animations; //offset = 780, size = 12
		Array<AnimSet*> AnimationSets; //offset = 792, size = 12
		Bool Looping: 1; //offset = 804, size = 4
		Bool RandomAnimation: 1; //offset = 804, size = 4

		Bool OnCreatureReachedWayPoint( Pawn* PathFindingCreature );
	};

	class BioWp_SniperPoint: public BioPathPoint
	{
		DECLARE_PACKAGE_CLASS( BioWp_SniperPoint, BioPathPoint, SFXGame )

	public:
	};

	class DynamicCylindricalForceActor: public RB_CylindricalForceActor
	{
		DECLARE_PACKAGE_CLASS( DynamicCylindricalForceActor, RB_CylindricalForceActor, SFXGame )

	public:
	};

	class SFXCustomAction_Frozen: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Frozen, SFXCustomAction_DamageReaction, SFXGame )

	public:

		Bool bWelded: 1; //offset = 176, size = 4

		void CheckEndRecovery( SFXAI_Core* oAI );
		void CheckBeginRecovery();
		void StopCustomAction();
		void StartRagdollPhase();
		void UnWeldPhysicsAssetInstance( BioAnimNodeFrame* SnapshotNode );
		void StartCustomAction();
		void Init( Vector HitLocation, Vector HitNormal, TraceHitInfo HitInfo, Bool bPlayImpact, Controller* Inst );
	};

	class SFXCustomAction_Ragdoll: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Ragdoll, SFXCustomAction_DamageReaction, SFXGame )

	public:

		Bool bHeldInRagdoll: 1; //offset = 176, size = 4

		void CheckEndRecovery();
		void CheckBeginRecovery();
		void RegisterRagdollVocCallback();
		void OnRagdollPhysicsImpact( Pawn* Pawn, Actor* oImpactActor, Vector vImpactDir );
		void RestartScream();
		void PlayScream();
		void StopCustomAction();
		void StartCustomAction();
		void Init( Vector HitLocation, Vector HitNormal, TraceHitInfo HitInfo, Bool bPlayImpact, Controller* Inst );
	};

	class SFXAI_Aggressive: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_Aggressive, SFXAI_Core, SFXGame )

	public:
	};

	class SFXNav_WayPoint: public NavigationPoint
	{
		DECLARE_PACKAGE_CLASS( SFXNav_WayPoint, NavigationPoint, SFXGame )

	public:

		Float m_fDelay; //offset = 776, size = 4
		Float m_fMoveOffset; //offset = 780, size = 4
		Bool m_bPrecisionMovement: 1; //offset = 784, size = 4
		Bool m_bMaintainVelocity: 1; //offset = 784, size = 4

		Bool OnPawnReachedWayPoint( Pawn* oPawn, Int I, Bool bPause );
	};


	class SFXAI_CombatScripted: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_CombatScripted, SFXAI_Core, SFXGame )

	public:
		struct Combat_Scripted
		{
		};

		void SwitchWeapon( SFXWeapon* oWpn );
		void MoveToGoalExternal( Actor* NewMoveGoal, Float NewMoveOffset, MoveDelegate MoveDelegate );
		void FireWeaponAtTarget( Actor* oTarget, Bool bCheckLOS, FireDelegate FireDelegate );
		void UsePowerOnTarget( Name nmPowerToUse, Actor* oTarget, PowerDelegate PowerDelegate, Bool bIgnoreSuppression );
	};


	class SFXAI_Critter: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_Critter, SFXAI_Core, SFXGame )

	public:
		struct MovingToLocation
		{
			/*
			NotifyNearMiss
			NotifyTakeHit
			*/
		};

		struct WanderingCritter
		{
			/*
			AdjustSteeringSpeed
			GetSteeringDirection
			NotifyNearMiss
			NotifyTakeHit
			PoppedState
			EndState
			PushedState
			BeginState
			*/
		};

		struct Idle
		{
		};

		Vector m_vRepulsor; //offset = 1368, size = 12
		Vector m_vCurrentSteeringDirection; //offset = 1380, size = 12
		Bool m_bUnderAttack: 1; //offset = 1392, size = 4

		void Initialize();
	};

	class SFXAI_Defensive: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_Defensive, SFXAI_Core, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveWeaponDamageBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveWeaponDamageBonus, SFXGameEffect, SFXGame )

	public:

		Bool bRemoved: 1; //offset = 104, size = 4

		void OnRemoved( BioPawn* BP, SFXModule_GameEffectManager* Manager );
		void OnApplied( BioPawn* BP, SFXModule_GameEffectManager* Manager );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_DamageMultiplier: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_DamageMultiplier, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( SFXModule_Damage* DmgModule );
		void OnApplied( SFXModule_Damage* DmgModule );
		void ComputeEffectValue( Float Value );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
	};

	class SFXCustomAction_Knockback: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Knockback, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_DeathKnockback: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_DeathKnockback, SFXCustomAction_DamageReaction, SFXGame )

	public:

		Float RagdollDuration; //offset = 176, size = 4

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
	};

	class SFXCustomAction_PlayerStagger: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerStagger, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_PlayerMeleed: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerMeleed, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_PlayerStandardImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerStandardImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_PlayerKnockback: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerKnockback, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_Meleed: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Meleed, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_BloodyPlayerStandardImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_BloodyPlayerStandardImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_PlayerOnFire: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerOnFire, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_ElectricStandardImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ElectricStandardImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_MeleedII: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_MeleedII, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	enum EHumanoidBehaviours
	{
		HB_Defensive,
		HB_Aggressive,
	};


	class SFXAI_Humanoid: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_Humanoid, SFXAI_Core, SFXGame )

	public:
		struct Combat_Defensive
		{
			/*
			PoppedState
			*/
		};

		struct Combat_Aggressive
		{
			/*
			ReEvaluateCover
			*/
		};

		Byte m_eCurrentBehaviour; //offset = 1368, size = 1
		Int m_nInvalidatedCoverRetries; //offset = 1372, size = 4
		Int m_nCoverMoveCount; //offset = 1376, size = 4

		void NotifyUnderAttack( Bool bHit );
		Bool SetDefaultBehaviour( Name NewBehaviour, Int nBehaviourIndex );
	};

	class SFXCustomAction_Freezing: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Freezing, SFXCustomAction_DamageReaction, SFXGame )

	public:

		Array<BodyStance> BodyStances; //offset = 176, size = 12

		void StartCustomAction();
	};

	class SFXCustomAction_Headshot: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Headshot, SFXCustomAction_DamageReaction, SFXGame )

	public:

		void StartCustomAction( BioPlayerController* oCont, BioPawn* oPlayer );
	};

	class SFXCustomAction_GreatPain: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_GreatPain, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_Staggering: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Staggering, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_Reave: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Reave, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_HitLeftLeg: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_HitLeftLeg, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_HitRightLeg: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_HitRightLeg, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_CorkscrewDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_CorkscrewDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_ExplosionDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ExplosionDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_LeftArmDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_LeftArmDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_RightArmDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_RightArmDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_StomachDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_StomachDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_OnFire: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_OnFire, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_TakeAKnee: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_TakeAKnee, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_StaggerImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_StaggerImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_StandardImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_StandardImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_ShieldKnockback: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ShieldKnockback, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_ShieldStaggerImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ShieldStaggerImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_ShieldStandardImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ShieldStandardImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_NeuralShock: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_NeuralShock, SFXCustomAction_DamageReaction, SFXGame )

	public:

		Float RagdollDuration; //offset = 176, size = 4
		Name GameEffectCategory; //offset = 180, size = 8
		Name PowerName; //offset = 188, size = 8

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime, SFXModule_GameEffectManager* Manager, SFXGameEffect* Effect );
	};

	class SFXCustomAction_PlayerShortStagger: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerShortStagger, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_StumbleForward: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_StumbleForward, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_GreatPainII: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_GreatPainII, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_KnockbackII: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_KnockbackII, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_PunchDeathKnockback: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PunchDeathKnockback, SFXCustomAction_DamageReaction, SFXGame )

	public:

		Float RagdollDuration; //offset = 176, size = 4

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
	};

	class SFXCustomAction_ExplosiveKnockback: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ExplosiveKnockback, SFXCustomAction_DamageReaction, SFXGame )

	public:

		Float RagdollDuration; //offset = 176, size = 4

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
	};

	class SFXCustomAction_OnFireShort: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_OnFireShort, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};


	class SFXAI_TechDrone: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_TechDrone, SFXAI_Core, SFXGame )

	public:
		struct MovingToGoal
		{
			/*
			PeriodicMoveCheck
			*/
		};

		struct Combat_TechDrone
		{
		};

		void ClearForcedTarget();
		void Initialize();
	};


	class SFXAI_TechDrone_NPC: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_TechDrone_NPC, SFXAI_Core, SFXGame )

	public:
		struct MovingToGoal
		{
			/*
			PeriodicMoveCheck
			*/
		};

		struct Combat_TechDrone_NPC
		{
		};

		Bool bHasHowled: 1; //offset = 1368, size = 4
		Bool bHasFlanked: 1; //offset = 1368, size = 4
		Bool bHasTaunted: 1; //offset = 1368, size = 4
		Bool bHasWarned: 1; //offset = 1368, size = 4

		void SetMovementSpeed( Float fDistanceSquared );
	};


	class SFXAI_Vanguard: public SFXAI_Core
	{
		DECLARE_PACKAGE_CLASS( SFXAI_Vanguard, SFXAI_Core, SFXGame )

	public:
		struct MovingToGoal
		{
			/*
			PeriodicMoveCheck
			*/
		};

		struct Combat_Vanguard
		{
			/*
			PushedState
			*/
		};

		Int m_nInvalidatedCoverRetries; //offset = 1368, size = 4
		Bool m_bApproachTarget: 1; //offset = 1372, size = 4
		Bool m_bCheckLOSBeforeStop: 1; //offset = 1372, size = 4
		Bool m_bApproachEnemy: 1; //offset = 1372, size = 4
		Int m_nCoverMoveCount; //offset = 1376, size = 4
		Bool bHasHowled: 1; //offset = 1380, size = 4
		Bool bFarHowled: 1; //offset = 1380, size = 4
		Float m_fAggressiveTime; //offset = 1384, size = 4

		void SetMovementSpeed( Float fDistanceSquared );
		void AdvanceOnEnemy();
		void AdvanceTimer();
		void NotifyUnderAttack( Bool bHit );
	};


	class SFXAmmoContainer: public SFXDroppedAmmo
	{
		DECLARE_PACKAGE_CLASS( SFXAmmoContainer, SFXDroppedAmmo, SFXGame )

	public:
		struct Disabled
		{
			/*
			BeginState
			StartSleeping
			Reset
			*/
		};

		struct Sleeping
		{
			/*
			EndState
			BeginState
			StartSleeping
			*/
		};

		Bool bRespawns: 1; //offset = 552, size = 4
		Float RespawnTime; //offset = 556, size = 4
		Float BonusAmmo; //offset = 560, size = 4

		void GiveTo( Pawn* P );
		void StartSleeping();
		void SetRespawn();
		void SetInitialState();
	};

	class SFXGameEffect_ArmorBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_ArmorBonus, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( SFXModule_GameEffectManager* Manager, BioPawn* oPawn, SFXArmor_Base* Armor, SFXGameEffect* oEffect );
		void OnApplied( BioPawn* oPawn, SFXArmor_Base* Armor );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXArmor_Light: public SFXArmor_Base
	{
		DECLARE_PACKAGE_CLASS( SFXArmor_Light, SFXArmor_Base, SFXGame )

	public:
	};

	class SFXArmor_Medium: public SFXArmor_Base
	{
		DECLARE_PACKAGE_CLASS( SFXArmor_Medium, SFXArmor_Base, SFXGame )

	public:
	};

	class SFXArmor_Player: public SFXArmor_Base
	{
		DECLARE_PACKAGE_CLASS( SFXArmor_Player, SFXArmor_Base, SFXGame )

	public:
	};

	class SFXCameraMode_Interpolate: public SFXCameraMode
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_Interpolate, SFXCameraMode, SFXGame )

	public:

		Float TotalTime; //offset = 492, size = 4
		Float CurrentTime; //offset = 496, size = 4
		SFXCameraMode* From; //offset = 500, size = 4
		SFXCameraMode* To; //offset = 504, size = 4
		Bool bComplete: 1; //offset = 508, size = 4
		Float DefaultTime; //offset = 512, size = 4
		Float AimPointDistance; //offset = 516, size = 4
		Vector AimPoint; //offset = 520, size = 12
		Byte InterpMethod; //offset = 532, size = 1
		InterpCurveFloat Curve; //offset = 536, size = 16
		Rotator RotationOffset; //offset = 552, size = 12
		Vector LocationOffset; //offset = 564, size = 12
		Bool bDisableAimPointPreservation: 1; //offset = 576, size = 4

		Rotator GetCurrentShake(, Rotator shake1, Rotator shake2, Rotator Shake );
		void Tick( Float TimeDelta, Float T );
		void Trace( Actor* HitActor, Vector HitLocation, Vector TraceStart, Vector TraceEnd, Vector ToPC, Vector cameraRot, Vector Extent, Vector HitNormal, TraceHitInfo HitInfo );
		void InitializeTransition( SFXCameraMode* FromMode, SFXCameraMode* ToMode, Float Time, Bool PreserveTarget, Actor* A, Vector V );
		Bool CheckLoop( SFXCameraMode* Mode, Int RecurseLevel );
		Float Interpolate( Float T, Float O );
	};

	class SFXCameraAction_QuickTurn: public SFXCameraMode_Interpolate
	{
		DECLARE_PACKAGE_CLASS( SFXCameraAction_QuickTurn, SFXCameraMode_Interpolate, SFXGame )

	public:

		Int CurrentOffsetApplied; //offset = 580, size = 4

		void Tick( Float TimeDelta, Float OffsetDelta );
		void InitializeTransition( SFXCameraMode* FromMode, SFXCameraMode* ToMode, Float Time, Bool PreserveTarget );
	};

	class SFXCameraMode_Combat: public SFXCameraMode
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_Combat, SFXCameraMode, SFXGame )

	public:
	};

	class SFXCameraMode_CombatStorm: public SFXCameraMode_Combat
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_CombatStorm, SFXCameraMode_Combat, SFXGame )

	public:

		MotionBlurEffect* Blur; //offset = 492, size = 4

		void MakeInactive();
		void MakeActive();
	};

	class SFXCameraMode_Cover: public SFXCameraMode
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_Cover, SFXCameraMode, SFXGame )

	public:

		void Tick( Float fTimeDelta );
	};

	class SFXCameraMode_CoverFixed: public SFXCameraMode_Cover
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_CoverFixed, SFXCameraMode_Cover, SFXGame )

	public:

		Vector GetCameraLocation();
		Vector GetCollisionCameraHook();
		Bool Hack_IsViable(, BioPawn* BP );
	};

	class SFXCameraMode_ExploreStorm: public SFXCameraMode_Explore
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_ExploreStorm, SFXCameraMode_Explore, SFXGame )

	public:
	};

	class SFXCameraMode_SniperZoom: public SFXCameraMode
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_SniperZoom, SFXCameraMode, SFXGame )

	public:

		BioCameraZoom* ZoomData; //offset = 492, size = 4

		void Tick( Float TimeDelta, Actor* Ignored, Vector HitLocation, Vector HitNormal );
		void DoCameraCollision( Vector V, Rotator R, Actor* A, Int idx );
		void ModifyPostProcessSettings( PostProcessSettings PPSettings );
	};

	class SFXCameraMode_SniperZoomCover: public SFXCameraMode_SniperZoom
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_SniperZoomCover, SFXCameraMode_SniperZoom, SFXGame )

	public:

		Vector PosOffset[6]; //offset = 496, size = 12
		Vector PosHookOffset[6]; //offset = 568, size = 12
		Name PosHookName[6]; //offset = 640, size = 8
		Vector LastPosition; //offset = 688, size = 12

		Vector GetCameraLocation(, BioPawn* BP );
		void SetPosition( Byte pos );
	};

	class SFXCameraTransition_ZoomSnap: public SFXCameraMode_Interpolate
	{
		DECLARE_PACKAGE_CLASS( SFXCameraTransition_ZoomSnap, SFXCameraMode_Interpolate, SFXGame )

	public:

		Vector ZoomSnapTargetLocation; //offset = 580, size = 12
		Rotator StartRotation; //offset = 592, size = 12
		Vector StartLocation; //offset = 604, size = 12

		void Tick( Float TimeDelta, Float T );
		void MakeInactive();
		void InitializeTransition( SFXCameraMode* FromMode, SFXCameraMode* ToMode, Float Time, Bool PreserveTarget, SFXWeapon* Weapon );
	};

	class SFXCameraMode_TightAim: public SFXCameraMode
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_TightAim, SFXCameraMode, SFXGame )

	public:

		void Tick( Float TimeDelta );
	};

	class SFXCameraMode_TightAimCover: public SFXCameraMode_TightAim
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_TightAimCover, SFXCameraMode_TightAim, SFXGame )

	public:

		Vector PosOffset[6]; //offset = 492, size = 12
		Vector PosHookOffset[6]; //offset = 564, size = 12
		Name PosHookName[6]; //offset = 636, size = 8
		Vector LastPosition; //offset = 684, size = 12

		void Tick( Float TimeDelta );
		Vector GetCameraLocation(, BioPawn* BP );
		void SetPosition( Byte pos );
	};

	enum ECoverCameraPosition
	{
		CCP_PeekLeftCrouch,
		CCP_PeekLeftStand,
		CCP_PeekRightCrouch,
		CCP_PeekRightStand,
	};

	class SFXGameModeDefault: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeDefault, SFXGameModeBase, SFXGame )

	public:

		Float InputDelayStormExit; //offset = 92, size = 4
		Float InputDelayTightAimExit; //offset = 96, size = 4
		Float RadarMapDisplayTime; //offset = 100, size = 4
		SFXCameraMode_Combat* CombatCam; //offset = 104, size = 4
		SFXCameraMode_Explore* ExploreCam; //offset = 108, size = 4
		SFXCameraMode_CombatStorm* CombatStormCam; //offset = 112, size = 4
		SFXCameraMode_ExploreStorm* ExploreStormCam; //offset = 116, size = 4
		SFXCameraMode_TightAim* TightAimCam; //offset = 120, size = 4
		SFXCameraMode_SniperZoom* SniperZoomCam; //offset = 124, size = 4
		SFXCameraMode_TightAimCover* TightAimCoverCam; //offset = 128, size = 4
		SFXCameraMode_TightAimCover* TightAimCoverPopupCam; //offset = 132, size = 4
		SFXCameraMode_SniperZoomCover* SniperZoomCoverCam; //offset = 136, size = 4
		SFXCameraMode_Cover* AimBackCam; //offset = 140, size = 4
		SFXCameraMode_Cover* CoverStand; //offset = 144, size = 4
		SFXCameraMode_Cover* CoverCrouch; //offset = 148, size = 4
		SFXCameraMode_CoverFixed* CoverPeekLeftStand; //offset = 152, size = 4
		SFXCameraMode_CoverFixed* CoverPeekLeftCrouch; //offset = 156, size = 4
		SFXCameraMode_CoverFixed* CoverPeekRightStand; //offset = 160, size = 4
		SFXCameraMode_CoverFixed* CoverPeekRightCrouch; //offset = 164, size = 4
		SFXCameraMode_SniperZoomCover* SniperZoomCover_AimBack; //offset = 168, size = 4
		SFXCameraMode_TightAimCover* TightAimCover_AimBack; //offset = 172, size = 4
		Float SprintTransitionTime; //offset = 176, size = 4
		Float SprintFastTransitionTime; //offset = 180, size = 4
		Float DefaultAimTransitionTime; //offset = 184, size = 4
		Float DefaultAimTransitionExit; //offset = 188, size = 4
		Float DefaultCombatTransitionTime; //offset = 192, size = 4
		Float CoverEnter; //offset = 196, size = 4
		Float CoverTransitionTime; //offset = 200, size = 4
		Float CoverSlowTransitionTime; //offset = 204, size = 4
		Float SniperZoomTransitionTime; //offset = 208, size = 4
		SFXCameraTransition_ZoomSnap* ZoomSnapTransition; //offset = 212, size = 4
		InterpCurveFloat ZoomSnapCurve; //offset = 216, size = 16
		WwiseEvent* UseSucceeded; //offset = 232, size = 4
		WwiseEvent* UseFailed; //offset = 236, size = 4

		void SwitchToBackup();
		Bool ShowAreaMap(, MassEffectGuiManager* oManager, SFXSFHandler_AreaMap* oHandler, Bool bGotMap );
		void TryUsePower( Int Power, BioPlayerInput* Input, Name PowerName, SFXPawn_Player* Player, SFXWeapon* Weapon, SFXPower* oPower );
		void TurnStormOff();
		void StormOff();
		void StormOn( Bool bCanStorm, Byte CoverAction );
		void NextWeapon( SFXWeapon* Weapon, BioPawn* ChkPawn );
		void PrevWeapon( SFXWeapon* Weapon, BioPawn* ChkPawn );
		void TrySwapWeapon( SFXPawn_Player* ChkPawn );
		void ResetSelectionMaterialParams();
		Bool Used(, Actor* Selection, Bool bUsed, SFXSimpleUseModule* UseModule, BioActorBehavior* targetBehavior );
		void TryHolster( BioPawn* ChkPawn );
		void TryHeavyMelee( SFXWeapon* Weapon, BioPlayerInput* Input );
		void TryMelee( SFXWeapon* Weapon, BioPlayerInput* Input );
		void TryReload( SFXWeapon* Weapon, BioPawn* ChkPawn );
		Bool TryExitCover( Bool bForceExit, Float MoveStickMag, Float MoveStickAngle, Rotator MoveStickRot, Bool bCanStormOut, Byte CoverAction );
		void UseAbility( Int Ability );
		void EnterCommandMenu();
		void EnterWeaponWheel();
		void EnterPowerWheel();
		void TurnOffTightAim();
		void StopTightAim();
		void TightAim( BioPawn* ChkPawn );
		SFXCameraMode* GetCameraMode( SFXCameraMode* OldCameraMode, Int PreserveTarget, Float TransitionTime, SFXCameraMode_Interpolate* Transition, BioPawn* Player, SFXCameraMode* NewCameraMode, SFXWeapon* Weapon );
		void Initialize();
	};

	class SFXCameraMode_Vehicle: public SFXCameraMode
	{
		DECLARE_PACKAGE_CLASS( SFXCameraMode_Vehicle, SFXCameraMode, SFXGame )

	public:

		Float ArcRadius; //offset = 492, size = 4
		Float RegularCameraArcRadius; //offset = 496, size = 4
		Vector RegularCameraHookOffset; //offset = 500, size = 12
		Float AlternateCameraArcRadius; //offset = 512, size = 4
		Vector AlternateCameraHookOffset; //offset = 516, size = 12
		MotionBlurEffect* Blur; //offset = 528, size = 4
		Vector ElasticPosition; //offset = 532, size = 12
		Float ElasticSpeed; //offset = 544, size = 4
		Float ElasticScale; //offset = 548, size = 4
		Bool bUpdatedThisFrame: 1; //offset = 552, size = 4
		Vector HookLocation; //offset = 556, size = 12
		Float LastDeltaT; //offset = 568, size = 4

		void MakeInactive();
		void MakeActive();
		void Tick( Float DeltaTime );
		void UpdatePosition( Float Length1, Float Length2, Vector OldOffset, Vector NewOffset, Vector NiceOffset );
		Vector GetCameraLocation();
		void Initialize( BioPlayerController* PC );
	};

	class SFXCameraTransition_Animated: public SFXCameraMode_Interpolate
	{
		DECLARE_PACKAGE_CLASS( SFXCameraTransition_Animated, SFXCameraMode_Interpolate, SFXGame )

	public:

		CameraAnim* Anim; //offset = 580, size = 4
		Bool bAnimationBegun: 1; //offset = 584, size = 4
		Bool bScalePlayRate: 1; //offset = 584, size = 4
		Float DefaultBlendInTime; //offset = 588, size = 4
		Float DefaultBlendOutTime; //offset = 592, size = 4

		void Tick( Float TimeDelta, Float AnimPlaySpeed );
		void InitializeTransition( SFXCameraMode* FromMode, SFXCameraMode* ToMode, Float Time, Bool PreserveTarget );
	};

	class SFXCameraTransition_FaceTarget: public SFXCameraMode_Interpolate
	{
		DECLARE_PACKAGE_CLASS( SFXCameraTransition_FaceTarget, SFXCameraMode_Interpolate, SFXGame )

	public:

		Vector TargetLocation; //offset = 580, size = 12
		Rotator StartRotation; //offset = 592, size = 12
		Vector StartLocation; //offset = 604, size = 12

		void Tick( Float TimeDelta, Float T );
		void InitializeTransition( SFXCameraMode* FromMode, SFXCameraMode* ToMode, Float Time, Bool PreserveTarget );
	};

	class SFXCameraTransition_GalaxyMap: public SFXCameraMode_Interpolate
	{
		DECLARE_PACKAGE_CLASS( SFXCameraTransition_GalaxyMap, SFXCameraMode_Interpolate, SFXGame )

	public:

		void Tick( Float TimeDelta );
		void InitializeTransition( SFXCameraMode* FromMode, SFXCameraMode* ToMode, Float Time, Bool PreserveTarget );
	};

	class SFXCameraTransition_VanguardSlam: public SFXCameraTransition_Animated
	{
		DECLARE_PACKAGE_CLASS( SFXCameraTransition_VanguardSlam, SFXCameraTransition_Animated, SFXGame )

	public:

		Vector StartLocation; //offset = 596, size = 12
		Rotator StartRotation; //offset = 608, size = 12
		Float StartFOV; //offset = 620, size = 4
		Actor* TargetActor; //offset = 624, size = 4
		InterpCurveFloat FOVCurve; //offset = 628, size = 16
		InterpCurveFloat MovementCurve; //offset = 644, size = 16
		Float FOVChange; //offset = 660, size = 4
		Float FirstPhaseLength; //offset = 664, size = 4

		void Tick( Float TimeDelta, Float T );
		void InitializeTransition( SFXCameraMode* FromMode, SFXCameraMode* ToMode, Float Time, Bool PreserveTarget );
	};

	class SFXCustomAction_BloodLust: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_BloodLust, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_BovineFortitude: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_BovineFortitude, SFXCustomAction_DamageReaction, SFXGame )

	public:

		Float HealDuration; //offset = 176, size = 4
		WwiseEvent* Moo; //offset = 180, size = 4

		void DelayedSoundEffect();
		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime, SFXModule_GameEffectManager* Manager, SFXGameEffect* Effect, Float fHealAmount );
	};

	class SFXGameEffect_HealOverTime: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_HealOverTime, SFXGameEffect, SFXGame )

	public:

		void OnUpdate( Float DeltaSeconds, SFXModule_Damage* DmgModule, Float RegenAmount, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect, Float Penalty );
	};

	class SFXCustomAction_Exploration_Comm: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Exploration_Comm, SFXCustomAction_DamageReaction, SFXGame )

	public:

		void CheckMoving();
		void StartCustomAction();
	};

	class SFXCustomAction_GlobalDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_GlobalDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_GreatPainII_Death: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_GreatPainII_Death, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_HeavyMeleed: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_HeavyMeleed, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	const char* LUNGE_VISIBLE_THRESHOLD = 0.5;
	const char* LUNGE_HEIGHT_THRESHOLD = 200;

	class SFXCustomAction_HeavyPunchLunge: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_HeavyPunchLunge, BioCustomAction, SFXGame )

	public:

		Float MaxLungeDistance; //offset = 108, size = 4
		Array<BioPawn*> PawnTargets; //offset = 112, size = 12
		Bool bRequireTarget: 1; //offset = 124, size = 4
		Float ConeAngle; //offset = 128, size = 4
		Int MaxRagdollPhysLevel; //offset = 132, size = 4
		BodyStance BS_Punch; //offset = 136, size = 12
		Float WindUpDuration; //offset = 148, size = 4
		Float ChargePoseDuration; //offset = 152, size = 4
		Float SwingDuration; //offset = 156, size = 4
		Float HitPoseDuration; //offset = 160, size = 4
		ScreenShakeStruct HitShake; //offset = 164, size = 112
		ForceFeedbackWaveform* HitForceFeedback; //offset = 276, size = 4
		Float TimeDilationDuration; //offset = 280, size = 4
		Float TimeDilationAmount; //offset = 284, size = 4
		VisualEffect UtilizeCrust; //offset = 288, size = 8

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void PlayImpact( BioPlayerController* PC, BioPawn* Impacted, Array<Byte> Parts, Vector HitLocation, Float DamageWithBonus, Float fDamage, TraceHitInfo HitInfo, Float fImpactRadius, Float nMaxPhysicsLevel, SFXModule_GameEffectManager* GEModule, SFXModule_GameEffectManager* TargetGEModule, SFXPower* HeavyPunchPower );
		void Lunge( Vector Velocity );
		void StartCustomAction();
		void SetLeftArmIKEnabled( Bool bEnabled, SkelControlLimb* IKNode );
	};

	class SFXGameEffect_TimeDilation: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_TimeDilation, SFXGameEffect, SFXGame )

	public:

		InterpCurveFloat SlowDown; //offset = 104, size = 16
		Float TimeRemainingBeforePause; //offset = 120, size = 4

		void OnUnpaused();
		void OnPaused();
		void OnRemoved();
		void OnUpdate( Float TimeDelta, Float WorldTimeDilation );
		void OnApplied();
	};

	class SFXGameEffect_MeleeDamageBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_MeleeDamageBonus, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXDamageType_HeavyMelee: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_HeavyMelee, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXCustomAction_HuskImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_HuskImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	enum EMawBurrowAction
	{
		EMB_Lower,
		EMB_Raise,
	};

	class SFXCustomAction_MawBurrow: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_MawBurrow, BioCustomAction, SFXGame )

	public:

		BodyStance BS_MawLower; //offset = 108, size = 12
		BodyStance BS_MawRaise; //offset = 120, size = 12
		Byte m_eCurrentBurrowAction; //offset = 132, size = 1

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void ContinueCustomAction();
		void StopCustomAction();
		void StartCustomAction();
	};

	class SFXCustomAction_MawDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_MawDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
	};

	class SFXCustomAction_MechDogIdle: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_MechDogIdle, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_Melee: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Melee, BioCustomAction, SFXGame )

	public:

		BodyStance BS_Swipe; //offset = 108, size = 12
		AnimSet* AnimSet; //offset = 120, size = 4
		ScreenShakeStruct HitShake; //offset = 124, size = 112
		ForceFeedbackWaveform* HitForceFeedback; //offset = 236, size = 4
		Float Damage; //offset = 240, size = 4
		Float Force; //offset = 244, size = 4

		void CleanUp();
		void EndAction();
		void Impact( BioPawn* HitPawn, BioPower* MeleePower, SFXWeapon* Weapon );
		void StartCustomAction();
	};

	class SFXCustomAction_OculusDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_OculusDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_PlayerMeleedII: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerMeleedII, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_PlayerMeleedNoRotate: public SFXCustomAction_PlayerMeleed
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerMeleedNoRotate, SFXCustomAction_PlayerMeleed, SFXGame )

	public:
	};

	class SFXCustomAction_PlayerStumbleForward: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PlayerStumbleForward, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_Possessed: public BioCustomAction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Possessed, BioCustomAction, SFXGame )

	public:

		BodyStance BS_Possession; //offset = 108, size = 12

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StopCustomAction();
		void StartCustomAction();
	};

	class SFXCustomAction_PraetorianDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_PraetorianDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:

		void BodyStanceAnimEndNotification( AnimNodeSequence* SeqNode, Float PlayedTime, Float ExcessTime );
		void StartCustomAction( SFXSelectionModule* Selection );
	};

	class SFXCustomAction_RoboticImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_RoboticImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_ScionHeadless: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ScionHeadless, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_ScionImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ScionImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_Spider: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Spider, SFXCustomAction_DamageReaction, SFXGame )

	public:

		void StartCustomAction();
	};

	class SFXCustomAction_SpiderImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_SpiderImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_TentacleDeath: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_TentacleDeath, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_Utilize: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_Utilize, SFXCustomAction_DamageReaction, SFXGame )

	public:

		VisualEffect UtilizeCrust; //offset = 176, size = 8
		BodyStance BS_ReactionAlternative1; //offset = 184, size = 12
		BodyStance BS_ReactionAlternative2; //offset = 196, size = 12
		BodyStance BS_ReactionExploreAlternative; //offset = 208, size = 12

		void CheckFiring();
		void CheckMoving();
		void StartCustomAction( Float F, SFXPawn_Player* PlayerPawn );
	};

	class SFXCustomAction_VarrenImpact: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_VarrenImpact, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXCustomAction_ZombieTakeAKnee: public SFXCustomAction_DamageReaction
	{
		DECLARE_PACKAGE_CLASS( SFXCustomAction_ZombieTakeAKnee, SFXCustomAction_DamageReaction, SFXGame )

	public:
	};

	class SFXDamageType_Abomination: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Abomination, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_AIHacking: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_AIHacking, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_ArmorPiercingAmmo: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_ArmorPiercingAmmo, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Carnage: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Carnage, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_ColossusPulse: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_ColossusPulse, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_CombatDroneAttack: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_CombatDroneAttack, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_ConcussiveAmmo: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_ConcussiveAmmo, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_ConcussiveShot: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_ConcussiveShot, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Crush: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Crush, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_DisruptorAmmo: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_DisruptorAmmo, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Environmental: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Environmental, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_FireDamageOverTime: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_FireDamageOverTime, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Fissure: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Fissure, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Flashbang: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Flashbang, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_GunshipRocket: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_GunshipRocket, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_HeavyFireDamage: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_HeavyFireDamage, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_HeavyMechRocket: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_HeavyMechRocket, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_HuskMelee: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_HuskMelee, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_HuskTesla: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_HuskTesla, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_IgnoreShields: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_IgnoreShields, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_ImprovedDisruptorAmmo: public SFXDamageType_DisruptorAmmo
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_ImprovedDisruptorAmmo, SFXDamageType_DisruptorAmmo, SFXGame )

	public:
	};

	class SFXDamageType_Overload: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Overload, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_ImprovedOverload: public SFXDamageType_Overload
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_ImprovedOverload, SFXDamageType_Overload, SFXGame )

	public:
	};

	class SFXDamageType_IncendiaryAmmo: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_IncendiaryAmmo, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Incinerate: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Incinerate, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_KillTrigger: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_KillTrigger, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_KroganCharge: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_KroganCharge, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_LightMechShock: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_LightMechShock, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_MechDogBite: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_MechDogBite, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_MechDogTaser: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_MechDogTaser, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_Melee: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Melee, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_NeuralShock: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_NeuralShock, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_PowerArmor: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_PowerArmor, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_PraetorianAreaDamage: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_PraetorianAreaDamage, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_PraetorianDeathChoir: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_PraetorianDeathChoir, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_Pull: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Pull, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_RocketDroneAttack: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_RocketDroneAttack, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_Shatter: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Shatter, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_ShieldJack: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_ShieldJack, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Singularity: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Singularity, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Stasis: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Stasis, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_SunTlaColossusRocket: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_SunTlaColossusRocket, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_SunTlaExposure: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_SunTlaExposure, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_ThresherMawSpit: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_ThresherMawSpit, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_Throw: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Throw, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_VarrenBite: public SFXDamageType_Default
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_VarrenBite, SFXDamageType_Default, SFXGame )

	public:
	};

	class SFXDamageType_Warp: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Warp, SFXDamageType, SFXGame )

	public:
	};

	class SFXDamageType_Weapon: public SFXDamageType
	{
		DECLARE_PACKAGE_CLASS( SFXDamageType_Weapon, SFXDamageType, SFXGame )

	public:
	};

	class SFXSeqEvt_SFXDoorInteraction: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_SFXDoorInteraction, SequenceEvent, SFXGame )

	public:

		void TriggerInteraction( Byte CurrentState, Actor* EventInstigator, Array<Int> ActivateIndices, SeqVar_Object* ObjVar );
		void TriggerStateChange( Byte NewState, Byte PrevState, Actor* EventInstigator, Array<Int> ActivateIndices, SeqVar_Object* ObjVar );
	};

	const char* MAXGUNS = 4;


	class SFXDroppedPickup: public DroppedPickup
	{
		DECLARE_PACKAGE_CLASS( SFXDroppedPickup, DroppedPickup, SFXGame )

	public:
		struct Idle
		{
		};

		SkeletalMeshComponent* PickupMesh; //offset = 524, size = 4
		LightEnvironmentComponent* LightEnvironment; //offset = 528, size = 4

		void PickedUpBy( Pawn* P );
		void GiveTo( Pawn* P );
		void Used( Actor* User, SFXPawn_Player* Player, SFXWeapon* WeaponToRemove, SFXWeapon* ChkWeapon, SFXInventoryManager* InvMan, Int WeaponCount );
		void Landed( Vector HitNormal, Actor* FloorActor );
		void SetPickupMesh( PrimitiveComponent* NewPickupMesh, SkeletalMeshComponent* SkelMesh );
	};

	class SFXGameChoiceGUIData_HeavyWeapons: public SFXGameChoiceGUIData
	{
		DECLARE_PACKAGE_CLASS( SFXGameChoiceGUIData_HeavyWeapons, SFXGameChoiceGUIData, SFXGame )

	public:
	};

	struct TechData
	{
		Int TechId; //offset = 0, size = 4
		SFXChoiceEntry ChoiceEntry; //offset = 4, size = 120
		Name PlotName; //offset = 124, size = 8
		Int PlotID; //offset = 132, size = 4
		Int TreasureId; //offset = 136, size = 4
		Int UnlockId; //offset = 140, size = 4
		STech stTech; //offset = 144, size = 64
		STreasure stTreasure; //offset = 208, size = 56
		Int nContextId; //offset = 264, size = 4
		Int RMode; //offset = 268, size = 4
		Int DisableId; //offset = 272, size = 4
	};

	class SFXGameChoiceGUIData_Research: public SFXGameChoiceGUIData
	{
		DECLARE_PACKAGE_CLASS( SFXGameChoiceGUIData_Research, SFXGameChoiceGUIData, SFXGame )

	public:

		Array<TechData> tech; //offset = 112, size = 12
		Array<TechData> Research; //offset = 124, size = 12
		m_srTechTitle m_srTechTitle; //offset = 136, size = 4
		m_srTechSubTitle m_srTechSubTitle; //offset = 140, size = 4
		m_srTechAText m_srTechAText; //offset = 144, size = 4
		m_srTechBText m_srTechBText; //offset = 148, size = 4
		m_srResearchTitle m_srResearchTitle; //offset = 152, size = 4
		m_srResearchSubTitle m_srResearchSubTitle; //offset = 156, size = 4
		m_srResearchAText m_srResearchAText; //offset = 160, size = 4
		m_srResearchBText m_srResearchBText; //offset = 164, size = 4
		m_srResearchErrorTooExpensive m_srResearchErrorTooExpensive; //offset = 168, size = 4
		m_srResearchErrorCanNotLearn m_srResearchErrorCanNotLearn; //offset = 172, size = 4
	};

	class SFXGameChoiceGUIData_Weapons: public SFXGameChoiceGUIData
	{
		DECLARE_PACKAGE_CLASS( SFXGameChoiceGUIData_Weapons, SFXGameChoiceGUIData, SFXGame )

	public:
	};

	class SFXGameEffect_AIHacking: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_AIHacking, SFXGameEffect, SFXGame )

	public:

		BioBaseSquad* m_oOriginalSquad; //offset = 104, size = 4
		Class* OriginalFaction; //offset = 108, size = 4

		void OnRemoved( BioPawn* oPawn );
		void OnApplied( BioPawn* oPawn );
	};

	class SFXGameEffect_AIConfuse: public SFXGameEffect_AIHacking
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_AIConfuse, SFXGameEffect_AIHacking, SFXGame )

	public:

		void OnRemoved( BioPawn* oPawn, SFXModule_GameEffectManager* Manager, SFXGameEffect* Effect );
	};

	class SFXGameEffect_ArmorPenalty: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_ArmorPenalty, SFXGameEffect, SFXGame )

	public:

		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Cloak: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Cloak, SFXGameEffect, SFXGame )

	public:

		__OnCloakEnded__Delegate __OnCloakEnded__Delegate; //offset = 104, size = 12

		void OnCombatEnd();
		void DelayedRemoval( BioPawn* oPawn, SFXAI_Core* C );
		void OnRemoved( BioPawn* oPawn, Float fDelay );
		void OnApplied( BioPawn* oPawn, BioPawn* oNearbyPawn, BioPlayerSquad* oPlayerSquad, SFXAI_Core* oController );
		void OnCloakEnded();
	};

	class SFXGameEffect_CloakDamageBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_CloakDamageBonus, SFXGameEffect, SFXGame )

	public:

		void OnCombatEnd();
		void RemoveDamageBonuses( BioPawn* oPawn, InventoryManager* oInventoryManager, SFXWeapon* oWeapon );
		void OnRemoved( BioPawn* oPawn, Float fDelay );
		void OnApplied( BioPawn* oPawn, InventoryManager* oInventoryManager, SFXWeapon* oWeapon );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_CloakTargetable: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_CloakTargetable, SFXGameEffect, SFXGame )

	public:

		void OnCombatEnd();
		void DelayedRemoval( BioPawn* oPawn, BioPawnBehavior* oBPB );
		void OnRemoved( BioPawn* oPawn, Float fDelay );
		void OnApplied( BioPawn* oPawn, BioPawnBehavior* oBPB );
	};

	class SFXGameEffect_CustomFlag: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_CustomFlag, SFXGameEffect, SFXGame )

	public:

		void OnRemoved();
		void OnApplied();
	};

	class SFXGameEffect_DamageBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_DamageBonus, SFXGameEffect, SFXGame )

	public:

		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_DamageOverTime: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_DamageOverTime, SFXGameEffect, SFXGame )

	public:

		Class* GetDamageType();
		void OnUpdate( Float DeltaSeconds, SFXModule_Damage* DmgModule, Float DamageAmount, Vector HitLocation, Vector Momentum );
	};

	class SFXGameEffect_HealthRegenPenalty: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_HealthRegenPenalty, SFXGameEffect, SFXGame )

	public:

		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_DelayedCustomAction: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_DelayedCustomAction, SFXGameEffect, SFXGame )

	public:

		Byte CustomAction; //offset = 104, size = 1
		Bool bRagdollOnFail: 1; //offset = 108, size = 4
		Int MaxRagdollPhysicsLevel; //offset = 112, size = 4

		void OnRemoved( BioPawn* oPawn );
	};

	class SFXGameEffect_DisableAI: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_DisableAI, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( BioPawn* oPawn, SFXAI_Core* oController );
		void OnApplied( BioPawn* oPawn, SFXAI_Core* oController );
	};

	class SFXGameEffect_FireDamageOverTime: public SFXGameEffect_DamageOverTime
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_FireDamageOverTime, SFXGameEffect_DamageOverTime, SFXGame )

	public:

		Class* GetDamageType();
	};

	class SFXGameEffect_FireDeath: public SFXGameEffect_DeathEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_FireDeath, SFXGameEffect_DeathEffect, SFXGame )

	public:
	};

	class SFXGameEffect_FissureDamageOverTime: public SFXGameEffect_DamageOverTime
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_FissureDamageOverTime, SFXGameEffect_DamageOverTime, SFXGame )

	public:

		Class* GetDamageType();
	};

	class SFXGameEffect_PowerDamageBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PowerDamageBonus, SFXGameEffect, SFXGame )

	public:

		Bool bRemoved: 1; //offset = 104, size = 4

		void OnRemoved( BioPawn* oPawn, SFXPower* oPower );
		void OnApplied( BioPawn* oPawn, SFXPower* oPower );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Gear_AmplifierPads: public SFXGameEffect_PowerDamageBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_AmplifierPads, SFXGameEffect_PowerDamageBonus, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveHealthBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveHealthBonus, SFXGameEffect, SFXGame )

	public:

		Float AppliedBonus; //offset = 104, size = 4

		void OnRemoved( SFXModule_Damage* DmgModule );
		void OnApplied( SFXModule_Damage* DmgModule );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Gear_BodyArmor: public SFXGameEffect_PassiveHealthBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_BodyArmor, SFXGameEffect_PassiveHealthBonus, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveShieldRegenBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveShieldRegenBonus, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( BioPawn* OwnerPawn, SFXShield_Base* Shields );
		void OnApplied( BioPawn* OwnerPawn, SFXShield_Base* Shields );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Gear_CapacitorChestplate: public SFXGameEffect_PassiveShieldRegenBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_CapacitorChestplate, SFXGameEffect_PassiveShieldRegenBonus, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveNegotiationBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveNegotiationBonus, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Gear_DeathMask: public SFXGameEffect_PassiveNegotiationBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_DeathMask, SFXGameEffect_PassiveNegotiationBonus, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveHeavyAmmoBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveHeavyAmmoBonus, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( BioPawn* oPawn, SFXHeavyWeapon* Weapon );
		void OnApplied( BioPawn* oPawn, SFXHeavyWeapon* Weapon );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Gear_EquipmentPacks: public SFXGameEffect_PassiveHeavyAmmoBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_EquipmentPacks, SFXGameEffect_PassiveHeavyAmmoBonus, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveShieldBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveShieldBonus, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( BioPawn* OwnerPawn, SFXShield_Base* Shields );
		void OnApplied( BioPawn* OwnerPawn, SFXShield_Base* Shields, Float fShieldsBefore );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Gear_HeavyDampingGauntlets: public SFXGameEffect_PassiveShieldBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_HeavyDampingGauntlets, SFXGameEffect_PassiveShieldBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_HeavyLeftSideArmor: public SFXGameEffect_PassiveHealthBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_HeavyLeftSideArmor, SFXGameEffect_PassiveHealthBonus, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveMaxAmmoBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveMaxAmmoBonus, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( BioPawn* oPawn, SFXWeapon* Weapon );
		void OnApplied( BioPawn* oPawn, SFXWeapon* Weapon );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Gear_LeftArmAmmoPack: public SFXGameEffect_PassiveMaxAmmoBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_LeftArmAmmoPack, SFXGameEffect_PassiveMaxAmmoBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_LifeSupportWebbing: public SFXGameEffect_PassiveHealthBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_LifeSupportWebbing, SFXGameEffect_PassiveHealthBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_N7Arms: public SFXGameEffect_PassiveHealthBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_N7Arms, SFXGameEffect_PassiveHealthBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_N7Helmet: public SFXGameEffect_PassiveHealthBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_N7Helmet, SFXGameEffect_PassiveHealthBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_N7Legs: public SFXGameEffect_PassiveShieldBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_N7Legs, SFXGameEffect_PassiveShieldBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_N7Shoulders: public SFXGameEffect_PassiveWeaponDamageBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_N7Shoulders, SFXGameEffect_PassiveWeaponDamageBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_N7Torso: public SFXGameEffect_PowerDamageBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_N7Torso, SFXGameEffect_PowerDamageBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_PowerBelt: public SFXGameEffect_PassiveShieldBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_PowerBelt, SFXGameEffect_PassiveShieldBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_StabilizationGauntlets: public SFXGameEffect_PassiveWeaponDamageBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_StabilizationGauntlets, SFXGameEffect_PassiveWeaponDamageBonus, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveStormSpeedBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveStormSpeedBonus, SFXGameEffect, SFXGame )

	public:

		Bool bRemoved: 1; //offset = 104, size = 4

		void OnRemoved( BioPawn* oPawn, BioPawnType* PawnType, SFXMovementData* MoveData, SFXModule_GameEffectManager* Manager );
		void OnApplied( BioPawn* oPawn, BioPawnType* PawnType, SFXMovementData* MoveData, SFXModule_GameEffectManager* Manager );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_Gear_StimulatorConduits: public SFXGameEffect_PassiveStormSpeedBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_StimulatorConduits, SFXGameEffect_PassiveStormSpeedBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_StrengthBoostPads: public SFXGameEffect_MeleeDamageBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_StrengthBoostPads, SFXGameEffect_MeleeDamageBonus, SFXGame )

	public:
	};

	class SFXGameEffect_Gear_Visor: public SFXGameEffect_PassiveHeadShotBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_Gear_Visor, SFXGameEffect_PassiveHeadShotBonus, SFXGame )

	public:
	};

	class SFXGameEffect_GiveShield: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_GiveShield, SFXGameEffect, SFXGame )

	public:

		Class* ShieldClass; //offset = 104, size = 4
		SFXShield_Base* NewShield; //offset = 108, size = 4
		Bool bForceNewShield: 1; //offset = 112, size = 4

		void OnRemoved( BioPawn* oPawn, SFXShield_Base* Shields );
		void CreateShield( BioPawn* oPawn, SFXLoadoutData* ChkLoadout );
		void OnApplied( BioPawn* oPawn, Float fShieldIncrease, SFXShield_Base* Shields );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_HardenedShields: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_HardenedShields, SFXGameEffect, SFXGame )

	public:

		Bool bWasHardened: 1; //offset = 104, size = 4

		void OnRemoved( BioPawn* oPawn, SFXShield_Base* Shields );
		void OnApplied( BioPawn* oPawn, SFXShield_Base* Shields );
	};

	class SFXGameEffect_HealShieldOverTime: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_HealShieldOverTime, SFXGameEffect, SFXGame )

	public:

		void OnUpdate( Float DeltaSeconds, BioPawn* oPawn, Float RegenAmount, SFXShield_Base* oShield );
	};

	class SFXGameEffect_HealthBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_HealthBonus, SFXGameEffect, SFXGame )

	public:

		Float PercentHealthBonus; //offset = 104, size = 4

		void OnRemoved( SFXModule_Damage* DmgModule );
		void OnApplied( SFXModule_Damage* DmgModule, Float fBaseMaxHealth );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_HeavyFireDamage: public SFXGameEffect_DamageOverTime
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_HeavyFireDamage, SFXGameEffect_DamageOverTime, SFXGame )

	public:

		Class* GetDamageType();
	};

	class SFXGameEffect_IgnorePlayerSquad: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_IgnorePlayerSquad, SFXGameEffect, SFXGame )

	public:

		Bool IsStillIgnoring( BioPawn* oPawn, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
		void OnRemoved( BioPawn* oPawn, BioPlayerSquad* oPlayerSquad, SFXAI_Core* oController );
		void OnApplied( BioPawn* oPawn, BioPlayerSquad* oPlayerSquad, SFXAI_Core* oController );
	};

	class SFXGameEffect_MeleeCooldown: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_MeleeCooldown, SFXGameEffect, SFXGame )

	public:
	};

	class SFXGameEffect_PassiveMovementSpeedBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PassiveMovementSpeedBonus, SFXGameEffect, SFXGame )

	public:

		Bool bRemoved: 1; //offset = 104, size = 4

		void OnRemoved( BioPawn* oPawn, BioPawnType* PawnType, SFXMovementData* MoveData, SFXModule_GameEffectManager* Manager, Float fModifier );
		void OnApplied( BioPawn* oPawn, BioPawnType* PawnType, SFXMovementData* MoveData, SFXModule_GameEffectManager* Manager, Float fModifier );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_PowerArmor: public SFXGameEffect_GiveShield
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PowerArmor, SFXGameEffect_GiveShield, SFXGame )

	public:

		BioVFXTemplate* ShieldCrust_Male; //offset = 116, size = 4
		BioVFXTemplate* ShieldCrust_Female; //offset = 120, size = 4
		BioVFXTemplate* ShieldDeathCrust; //offset = 124, size = 4
		BioVisualEffect* PlayerVFX; //offset = 128, size = 4
		BioVisualEffect* HenchVFX; //offset = 132, size = 4
		BioPawn* OwnerPawn; //offset = 136, size = 4
		ParticleSystem* ShieldExplosion; //offset = 140, size = 4
		Bool bShieldDestroyed: 1; //offset = 144, size = 4
		Float ExplosionRadius; //offset = 148, size = 4
		Float ExplosionDamage; //offset = 152, size = 4
		Float ExplosionForce; //offset = 156, size = 4
		Float ExplosionVFXParameter; //offset = 160, size = 4
		Float ExplosionShieldBoost; //offset = 164, size = 4
		Array<Byte> AnimatedReactions; //offset = 168, size = 12

		void OnRemoved( SFXModule_GameEffectManager* Manager, SFXGameEffect* Effect );
		void AreaExplosion( BioPawn* oImpactedPawn, Vector Momentum, SFXGame* oGame, SFXObjectPool* oPool, SFXEmitter* oEmitter );
		void OnShieldDestroyed( Bool PlayDeathCrust );
		void TurnVFXOff();
		void TurnVFXOn();
		void OnUpdate( Float DeltaSeconds, BioWorldInfo* Info, BioPlayerController* PC );
		void OnApplied( SFXShield_Base* Shields );
	};

	class SFXGameEffect_PowerCooldownModifier: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PowerCooldownModifier, SFXGameEffect, SFXGame )

	public:

		Bool bRemoved: 1; //offset = 104, size = 4

		void OnRemoved( BioPawn* oPawn, SFXPower* oPower );
		void OnApplied( BioPawn* oPawn, SFXPower* oPower );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_PowerDurationBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_PowerDurationBonus, SFXGameEffect, SFXGame )

	public:

		Bool bRemoved: 1; //offset = 104, size = 4

		void OnRemoved( BioPawn* oPawn, SFXPower* oPower );
		void OnApplied( BioPawn* oPawn, SFXPower* oPower );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_RecentlyMeleed: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_RecentlyMeleed, SFXGameEffect, SFXGame )

	public:
	};

	class SFXGameEffect_RecentlyMeleed_Second: public SFXGameEffect_RecentlyMeleed
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_RecentlyMeleed_Second, SFXGameEffect_RecentlyMeleed, SFXGame )

	public:
	};

	class SFXGameEffect_ShieldBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_ShieldBonus, SFXGameEffect, SFXGame )

	public:

		Float PercentShieldBonus; //offset = 104, size = 4

		void OnRemoved( BioPawn* OwnerPawn, SFXShield_Base* Shields );
		void OnApplied( BioPawn* OwnerPawn, SFXShield_Base* Shields, Float fMaxBaseShields );
		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_ShieldBoost: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_ShieldBoost, SFXGameEffect, SFXGame )

	public:

		Bool IsShieldBoosted( BioPawn* oPawn, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
		void OnRemoved( BioPawn* oPawn, SFXShield_Base* oShields );
		void OnApplied( BioPawn* oPawn, SFXShield_Base* oShields );
	};

	class SFXGameEffect_ShieldDamageReduction: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_ShieldDamageReduction, SFXGameEffect, SFXGame )

	public:

		Float ComputeTotalEffectValue( Float baseValue, Float StackingValue, Float NonStackingValue );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_SingularityImmune: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_SingularityImmune, SFXGameEffect, SFXGame )

	public:
	};

	class SFXGameEffect_SniperTimeDilation: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_SniperTimeDilation, SFXGameEffect, SFXGame )

	public:

		InterpCurveFloat SlowDown; //offset = 104, size = 16
		Bool bTimeSlowed: 1; //offset = 120, size = 4
		Float SlowDownTimer; //offset = 124, size = 4
		Float SlowDownDuration; //offset = 128, size = 4
		BioPawn* BP; //offset = 132, size = 4
		BioPlayerController* Controller; //offset = 136, size = 4
		BioPlayerInput* PlayerInput; //offset = 140, size = 4

		void SlowTime();
		void OnUpdate( Float TimeDelta, Bool bInSniperZoom );
		void OnApplied();
	};

	class SFXGameEffect_StopHealthRegen: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_StopHealthRegen, SFXGameEffect, SFXGame )

	public:

		SFXModule_DamageParty* DamageModule; //offset = 104, size = 4

		void OnUpdate( Float DeltaSeconds );
		void OnApplied();
	};

	class SFXGameEffect_StopShieldRegen: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_StopShieldRegen, SFXGameEffect, SFXGame )

	public:

		BioPawn* Pawn; //offset = 104, size = 4
		SFXShield_Base* Shield; //offset = 108, size = 4

		void OnUpdate( Float DeltaSeconds );
		void OnApplied();
	};

	class SFXGameEffect_StormTimeDilation: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_StormTimeDilation, SFXGameEffect, SFXGame )

	public:

		InterpCurveFloat StormSlowDown; //offset = 104, size = 16
		Float CustomTimeDilation; //offset = 120, size = 4
		Float PostStormDilationTime; //offset = 124, size = 4
		Float TimeSinceStorm; //offset = 128, size = 4
		BioPawn* BP; //offset = 132, size = 4
		BioPlayerController* Controller; //offset = 136, size = 4

		void OnRemoved();
		void OnApplied();
		void SlowTime();
		void OnUpdate( Float TimeDelta, SFXModule_GameEffectManager* Manager, SFXGameEffect* oEffect );
	};

	class SFXGameEffect_WarpDamageOverTime: public SFXGameEffect_DamageOverTime
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_WarpDamageOverTime, SFXGameEffect_DamageOverTime, SFXGame )

	public:

		Class* GetDamageType();
	};

	class SFXGameEffect_WeaponDamageBonus: public SFXGameEffect_PassiveWeaponDamageBonus
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_WeaponDamageBonus, SFXGameEffect_PassiveWeaponDamageBonus, SFXGame )

	public:
	};

	class SFXGameEffect_WeaponRateOfFireBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_WeaponRateOfFireBonus, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( BioPawn* oPawn, SFXWeapon* oWeapon );
		void OnApplied( BioPawn* oPawn, SFXWeapon* oWeapon );
	};

	class SFXGameEffect_WeaponRecoilBonus: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_WeaponRecoilBonus, SFXGameEffect, SFXGame )

	public:

		void OnRemoved( BioPawn* BP, SFXModule_GameEffectManager* Manager );
		void OnApplied( BioPawn* BP, SFXModule_GameEffectManager* Manager );
		void ComputeEffectValue( Float Value );
	};

	class SFXGameEffect_WeaponVFXChange: public SFXGameEffect
	{
		DECLARE_PACKAGE_CLASS( SFXGameEffect_WeaponVFXChange, SFXGameEffect, SFXGame )

	public:

		Bool bModifyTracer: 1; //offset = 104, size = 4
		Bool bModifyMuzzleFlash: 1; //offset = 104, size = 4
		Bool bModifyImpactVFX: 1; //offset = 104, size = 4
		StaticMesh* Tracer; //offset = 108, size = 4
		ParticleSystem* oMuzzleVFX; //offset = 112, size = 4
		ParticleSystem* oMuzzleLoopVFX; //offset = 116, size = 4
		ParticleSystem* oImpactVFX; //offset = 120, size = 4
		SFXWeapon* CastAtWeapon; //offset = 124, size = 4

		Bool UseLoopingMuzzleVFX( SFXWeapon* Weapon );
		void OnRemoved();
		void OnApplied();
	};

	class SFXSeqEvt_LeaveWorld: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_LeaveWorld, SequenceEvent, SFXGame )

	public:
	};

	class SFXGameModeCheatMenu: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeCheatMenu, SFXGameModeBase, SFXGame )

	public:

		void IPEDownAction( BioWorldInfo* oBWI );
		void IPEUpAction( BioWorldInfo* oBWI );
		void IPELeftTrigger( BioWorldInfo* oBWI );
		void IPERightTrigger( BioWorldInfo* oBWI );
		void IPELeftShoulder( BioWorldInfo* oBWI );
		void IPERightShoulder( BioWorldInfo* oBWI );
		void EndIPE( BioWorldInfo* oBWI );
		void IPEBack( BioWorldInfo* oBWI );
		void IPEForward( BioWorldInfo* oBWI );
	};

	class SFXGameModeCinematic: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeCinematic, SFXGameModeBase, SFXGame )

	public:

		void SkipCinematic( BioWorldInfo* BWI );
		void Activated( Actor* A, SFXSelectionModule* SelMod );
	};

	class SFXGameModeCommand: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeCommand, SFXGameModeBase, SFXGame )

	public:

		Bool bCameraEnabled: 1; //offset = 92, size = 4

		void ShowMenu();
		void ExitCommandMenu();
		void DisableCamera();
		void EnableCamera();
		void Deactivated();
		void Activated();
	};

	class SFXGameModeConversation: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeConversation, SFXGameModeBase, SFXGame )

	public:

		BioCameraBehaviorConversation* ConversationCam; //offset = 92, size = 4
		SFXCameraTransition_GalaxyMap* InstantTransition; //offset = 96, size = 4

		void HighlightDefaultResponse( MassEffectGuiManager* GuiMan, BioSFHandler_Conversation* ConvHandler );
		void SkipConversation( MassEffectGuiManager* GuiMan, BioSFHandler_Conversation* ConvHandler );
		void SelectResponse( MassEffectGuiManager* GuiMan, BioSFHandler_Conversation* ConvHandler );
		void InterruptParagon( MassEffectGuiManager* GuiMan, BioSFHandler_Conversation* ConvHandler );
		void InterruptRenegade( MassEffectGuiManager* GuiMan, BioSFHandler_Conversation* ConvHandler );
		void Deactivated();
		void Activated( Actor* A, SFXSelectionModule* SelMod );
		SFXCameraMode* HACK_GetCameraMode();
		SFXCameraMode* GetCameraMode( SFXCameraMode* OldCameraMode, Int PreserveTarget, Float TransitionTime, SFXCameraMode_Interpolate* Transition );
	};

	class SFXGameModeGUI: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeGUI, SFXGameModeBase, SFXGame )

	public:

		Array<Name> StackedGuis; //offset = 92, size = 12
		BioCameraBehaviorFlourish* DeathCam; //offset = 104, size = 4
		SFXCameraTransition_GalaxyMap* InstantTransition; //offset = 108, size = 4

		Bool HideAreaMap(, MassEffectGuiManager* oManager, SFXSFHandler_AreaMap* oHandler );
		void DecryptSelect( BioSkillGame_Decryption_Handler* Handler, MassEffectGuiManager* GuiMan );
		void DecryptRight( BioSkillGame_Decryption_Handler* Handler, MassEffectGuiManager* GuiMan );
		void DecryptLeft( BioSkillGame_Decryption_Handler* Handler, MassEffectGuiManager* GuiMan );
		void DecryptDown( BioSkillGame_Decryption_Handler* Handler, MassEffectGuiManager* GuiMan );
		void DecryptUp( BioSkillGame_Decryption_Handler* Handler, MassEffectGuiManager* GuiMan );
		void PrevCerberusItem( BioSFHandler_MainMenu* Menu, MassEffectGuiManager* GuiMan );
		void NextCerberusItem( BioSFHandler_MainMenu* Menu, MassEffectGuiManager* GuiMan );
		void DeactivateSpecifier( Name ModeSpecifier );
		void ActivateSpecifier( Name ModeSpecifier );
		void Deactivated();
		void Activated();
		SFXCameraMode* GetCameraMode( SFXCameraMode* OldCameraMode, Int PreserveTarget, Float TransitionTime, SFXCameraMode_Interpolate* Transition );
	};

	class SFXGameModePowerWheel: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModePowerWheel, SFXGameModeBase, SFXGame )

	public:

		Float DisableMoveTime; //offset = 92, size = 4

		void ShowMenu();
		void ExitPowerWheel();
		void EnableMovement();
		void Deactivated( SFXPRI* PRI );
		void Activated( SFXPRI* PRI );
	};

	class SFXGameModeWeaponWheel: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeWeaponWheel, SFXGameModeBase, SFXGame )

	public:

		Float DisableMoveTime; //offset = 92, size = 4

		void ShowMenu();
		void ExitWeaponWheel();
		void EnableMovement();
		void Deactivated( SFXPRI* PRI );
		void Activated( SFXPRI* PRI );
	};

	class SFXGameModeVehicle: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeVehicle, SFXGameModeBase, SFXGame )

	public:

		SFXCameraMode_Vehicle* VehicleCam; //offset = 92, size = 4

		void ShowMenu();
		SFXCameraMode* GetCameraMode( SFXCameraMode* OldCameraMode, Int PreserveTarget, Float TransitionTime, SFXCameraMode_Interpolate* Transition );
		void Initialize();
	};

	class SFXGameModeMovie: public SFXGameModeBase
	{
		DECLARE_PACKAGE_CLASS( SFXGameModeMovie, SFXGameModeBase, SFXGame )

	public:

		Bool bLoadingMovie: 1; //offset = 92, size = 4

		void SkipMovie();
		void Deactivated();
		void ActivateSpecifier( Name ModeSpecifier );
	};

	class SFXPhysicalMaterialImpactEffects: public SFXPhysicalMaterialBase
	{
		DECLARE_PACKAGE_CLASS( SFXPhysicalMaterialImpactEffects, SFXPhysicalMaterialBase, SFXGame )

	public:

		ParticleSystem* HeavyPistol; //offset = 60, size = 4
		ParticleSystem* AutoPistol; //offset = 64, size = 4
		ParticleSystem* HandCannon; //offset = 68, size = 4
		ParticleSystem* SMG; //offset = 72, size = 4
		ParticleSystem* Shotgun; //offset = 76, size = 4
		ParticleSystem* HeavyShotgun; //offset = 80, size = 4
		ParticleSystem* FlakGun; //offset = 84, size = 4
		ParticleSystem* AssaultRifle; //offset = 88, size = 4
		ParticleSystem* Needler; //offset = 92, size = 4
		ParticleSystem* Machinegun; //offset = 96, size = 4
		ParticleSystem* SniperRifle; //offset = 100, size = 4
		ParticleSystem* AntiMatRifle; //offset = 104, size = 4
		ParticleSystem* MassCannon; //offset = 108, size = 4
		ParticleSystem* ParticleBeam; //offset = 112, size = 4
	};

	class SFXPhysicalMaterialImpactSounds: public SFXPhysicalMaterialBase
	{
		DECLARE_PACKAGE_CLASS( SFXPhysicalMaterialImpactSounds, SFXPhysicalMaterialBase, SFXGame )

	public:

		WwiseEvent* HeavyPistol; //offset = 60, size = 4
		WwiseEvent* HeavyPistol_Player; //offset = 64, size = 4
		WwiseEvent* AutoPistol; //offset = 68, size = 4
		WwiseEvent* AutoPistol_Player; //offset = 72, size = 4
		WwiseEvent* HandCannon; //offset = 76, size = 4
		WwiseEvent* HandCannon_Player; //offset = 80, size = 4
		WwiseEvent* SMG; //offset = 84, size = 4
		WwiseEvent* SMG_Player; //offset = 88, size = 4
		WwiseEvent* Shotgun; //offset = 92, size = 4
		WwiseEvent* Shotgun_Player; //offset = 96, size = 4
		WwiseEvent* HeavyShotgun; //offset = 100, size = 4
		WwiseEvent* HeavyShotgun_Player; //offset = 104, size = 4
		WwiseEvent* FlakGun; //offset = 108, size = 4
		WwiseEvent* FlakGun_Player; //offset = 112, size = 4
		WwiseEvent* AssaultRifle; //offset = 116, size = 4
		WwiseEvent* AssaultRifle_Player; //offset = 120, size = 4
		WwiseEvent* Needler; //offset = 124, size = 4
		WwiseEvent* Needler_Player; //offset = 128, size = 4
		WwiseEvent* Machinegun; //offset = 132, size = 4
		WwiseEvent* Machinegun_Player; //offset = 136, size = 4
		WwiseEvent* SniperRifle; //offset = 140, size = 4
		WwiseEvent* SniperRifle_Player; //offset = 144, size = 4
		WwiseEvent* AntiMatRifle; //offset = 148, size = 4
		WwiseEvent* AntiMatRifle_Player; //offset = 152, size = 4
		WwiseEvent* MassCannon; //offset = 156, size = 4
		WwiseEvent* MassCannon_Player; //offset = 160, size = 4
		WwiseEvent* ParticleBeam; //offset = 164, size = 4
		WwiseEvent* ParticleBeam_Player; //offset = 168, size = 4
	};

	class SFXPhysicalMaterialDecals: public SFXPhysicalMaterialBase
	{
		DECLARE_PACKAGE_CLASS( SFXPhysicalMaterialDecals, SFXPhysicalMaterialBase, SFXGame )

	public:

		Array<DecalComponent*> HeavyPistol; //offset = 60, size = 12
		Float HeavyPistolFadeTime; //offset = 72, size = 4
		Array<DecalComponent*> AutoPistol; //offset = 76, size = 12
		Float AutoPistolFadeTime; //offset = 88, size = 4
		Array<DecalComponent*> HandCannon; //offset = 92, size = 12
		Float HandCannonFadeTime; //offset = 104, size = 4
		Array<DecalComponent*> SMG; //offset = 108, size = 12
		Float SMGFadeTime; //offset = 120, size = 4
		Array<DecalComponent*> Shotgun; //offset = 124, size = 12
		Float ShotgunFadeTime; //offset = 136, size = 4
		Array<DecalComponent*> HeavyShotgun; //offset = 140, size = 12
		Float HeavyShotgunFadeTime; //offset = 152, size = 4
		Array<DecalComponent*> FlakGun; //offset = 156, size = 12
		Float FlakGunFadeTime; //offset = 168, size = 4
		Array<DecalComponent*> AssaultRifle; //offset = 172, size = 12
		Float AssaultRifleFadeTime; //offset = 184, size = 4
		Array<DecalComponent*> Needler; //offset = 188, size = 12
		Float NeedlerFadeTime; //offset = 200, size = 4
		Array<DecalComponent*> Machinegun; //offset = 204, size = 12
		Float MachinegunFadeTime; //offset = 216, size = 4
		Array<DecalComponent*> SniperRifle; //offset = 220, size = 12
		Float SniperRifleFadeTime; //offset = 232, size = 4
		Array<DecalComponent*> AntiMatRifle; //offset = 236, size = 12
		Float AntiMatRifleFadeTime; //offset = 248, size = 4
		Array<DecalComponent*> MassCannon; //offset = 252, size = 12
		Float MassCannonFadeTime; //offset = 264, size = 4
		Array<DecalComponent*> ParticleBeam; //offset = 268, size = 12
		Float ParticleBeamFadeTime; //offset = 280, size = 4
	};

	class SFXProjectilePooled: public SFXProjectile
	{
		DECLARE_PACKAGE_CLASS( SFXProjectilePooled, SFXProjectile, SFXGame )

	public:
	};

	enum ESFXTracerScaling
	{
		eSFXTracerScaling_Idle,
		eSFXTracerScaling_Up,
	};

	class SFXTracer: public SFXProjectilePooled
	{
		DECLARE_PACKAGE_CLASS( SFXTracer, SFXProjectilePooled, SFXGame )

	public:

		Byte ScaleMode; //offset = 612, size = 1
		Float ScaleTimeFactor; //offset = 616, size = 4
		Float ScaleTimeCount; //offset = 620, size = 4
		Vector DesiredEndPoint; //offset = 624, size = 12

		void Tick( Float DeltaTime, Float Pct, Vector NewScale );
		void ShutDown();
		void ScaleDownFinishedNotify();
		void ScaleDownStart();
		void ScaleUpFinishedNotify();
		void ScaleUpStart( Vector NewScale, BoxSphereBounds UnscaledBounds, Float MeshLength, Float MinSpeed, Float CurSpeed );
		void InitTracer( Vector Start, Vector End, Vector Direction, Float Lifetime );
	};

	class SFXTracer_Bullet: public SFXTracer
	{
		DECLARE_PACKAGE_CLASS( SFXTracer_Bullet, SFXTracer, SFXGame )

	public:

		void ProcessTouch( Actor* Other, Vector HitLocation, Vector HitNormal );
	};

	class SFXInterpTrackInstLightEnvQuality: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXInterpTrackInstLightEnvQuality, Object, SFXGame )

	public:
	};

	class SFXKeyBindingOveride: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXKeyBindingOveride, Object, SFXGame )

	public:

		Int GameMode; //offset = 60, size = 4
		Name KeyBinding; //offset = 64, size = 8
		Name Override; //offset = 72, size = 8
		Name Override; //offset = 80, size = 8
		KeyBindingDisplayName KeyBindingDisplayName; //offset = 88, size = 4
		KeyBindingDescription KeyBindingDescription; //offset = 92, size = 4
		Bool Control: 1; //offset = 96, size = 4
		Bool Shift: 1; //offset = 96, size = 4
		Bool Alt: 1; //offset = 96, size = 4
		Bool Control: 1; //offset = 96, size = 4
		Bool Shift: 1; //offset = 96, size = 4
		Bool Alt: 1; //offset = 96, size = 4
	};

	class SFXMiningNode: public SFXPointOfInterest
	{
		DECLARE_PACKAGE_CLASS( SFXMiningNode, SFXPointOfInterest, SFXGame )

	public:

		Float ImpulseMinStrength; //offset = 508, size = 4
		Float ImpulseMaxStrength; //offset = 512, size = 4
		Float ImpulseMinFrequency; //offset = 516, size = 4
		Float ImpulseMaxFrequency; //offset = 520, size = 4
		Float Radius; //offset = 524, size = 4
		Float Duration; //offset = 528, size = 4
		Bool bAlreadyMined: 1; //offset = 532, size = 4
		ParticleSystemComponent* PSC_GroundReticle; //offset = 536, size = 4

		void PostBeginPlay();
	};

	class SFXSeqEvt_VehicleMiningSuccess: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_VehicleMiningSuccess, SequenceEvent, SFXGame )

	public:
	};

	class SFXSeqEvt_VehicleMiningFailure: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_VehicleMiningFailure, SequenceEvent, SFXGame )

	public:
	};

	class SFXModule_Test: public SFXModule
	{
		DECLARE_PACKAGE_CLASS( SFXModule_Test, SFXModule, SFXGame )

	public:
	};

	class SFXSeqEvt_ReachedWaypoint: public SequenceEvent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqEvt_ReachedWaypoint, SequenceEvent, SFXGame )

	public:
	};

	class SFXNav_ActionStationWP: public SFXNav_WayPoint
	{
		DECLARE_PACKAGE_CLASS( SFXNav_ActionStationWP, SFXNav_WayPoint, SFXGame )

	public:

		Bool OnPawnReachedWayPoint( Pawn* oPawn, Bool bPause, Vector vDiff, Rotator RDiff );
	};

	class SFXNav_PlayAnimWP: public SFXNav_WayPoint
	{
		DECLARE_PACKAGE_CLASS( SFXNav_PlayAnimWP, SFXNav_WayPoint, SFXGame )

	public:

		Name AnimName; //offset = 788, size = 8
		Byte eStance; //offset = 796, size = 1

		Bool OnPawnReachedWayPoint( Pawn* oPawn, Bool bPause, SFXAI_Ambient* oAI );
	};


	class SFXProjectile_Repulsor: public SFXProjectile_Explosive
	{
		DECLARE_PACKAGE_CLASS( SFXProjectile_Repulsor, SFXProjectile_Explosive, SFXGame )

	public:
		struct Armed
		{
			/*
			PushAllEncroachers
			*/
		};

		void ShutDown();
		void Explode( Vector HitLocation, Vector HitNormal );
	};

	class SFXSeqAct_3DCeberusStateChange: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_3DCeberusStateChange, SequenceAction, SFXGame )

	public:

		Byte m_eCerberus3DStateChange; //offset = 240, size = 1

		void Activated( MassEffectGuiManager* oSFManager, BioSFHandler_MainMenu* oMainMenu, BioWorldInfo* oWorldInfo, BioPlayerController* PC );
	};

	class SFXSeqAct_AttemptDeviceDetection: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_AttemptDeviceDetection, SequenceAction, SFXGame )

	public:

		void Activated( BioPlayerController* PC, BioWorldInfo* WorldInfo );
	};

	class SFXSeqAct_AwardEndGameAchievements: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_AwardEndGameAchievements, SequenceAction, SFXGame )

	public:

		void Activated( BioPlayerController* PC, SFXEngine* Engine, SFXProfileSettings* Profile, BioGlobalVariableTable* VarTable, Int NumGameCompletions, String LastCompletedCareer, String CurrentCareer );
	};

	class SFXSeqAct_AwardResource: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_AwardResource, SequenceAction, SFXGame )

	public:

		Int ResourcePercent; //offset = 240, size = 4
		Bool bAbsoluteAmount: 1; //offset = 244, size = 4
		Bool bIsSalvage: 1; //offset = 244, size = 4
		Byte TreasureType; //offset = 248, size = 1

		void Activated( BioWorldInfo* oWorldInfo );
	};

	class SFXSeqAct_CanAffordTreasure: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CanAffordTreasure, SequenceAction, SFXGame )

	public:

		Int nState; //offset = 240, size = 4

		void Activated( BioWorldInfo* oWorldInfo, Bool bQualifies );
	};

	class SFXSeqAct_CanSpendTallentPoints: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CanSpendTallentPoints, SequenceAction, SFXGame )

	public:

		SFXPowerLevelUpHelper* m_Helper; //offset = 240, size = 4

		Bool CanSpendTallentPoints(, Int I, Int nSquadSize, Bool bCanSpendPoints, BioPawn* oPawn, BioPlayerSquad* oSquad, BioWorldInfo* oBWI );
		void Deactivated();
		void Activated();
	};

	class SFXSeqAct_CheckResourceBudget: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CheckResourceBudget, SequenceAction, SFXGame )

	public:

		Name nmLevel; //offset = 240, size = 8
		Bool bDiscount: 1; //offset = 248, size = 4
		Byte TreasureType; //offset = 252, size = 1
		Int nAmount; //offset = 256, size = 4

		void Activated( BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, SResourceBudget stBudget );
	};

	class SFXSeqAct_ChooseLoadoutBase: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ChooseLoadoutBase, SeqAct_Latent, SFXGame )

	public:

		Bool m_bFinished: 1; //offset = 256, size = 4
		Bool m_bAllHenchmen: 1; //offset = 256, size = 4
		BioSFHandler_ChoiceGUI* TopMenu; //offset = 260, size = 4
		BioSFHandler_ChoiceGUI* SubMenu; //offset = 264, size = 4
		BioSFHandler_ChoiceGUI* SpecialWeaponToggleMenu; //offset = 268, size = 4
		Int SubMenuWeaponIdx; //offset = 272, size = 4
		ButtonText_Choose ButtonText_Choose; //offset = 276, size = 4
		ButtonText_Exit ButtonText_Exit; //offset = 280, size = 4
		ButtonText_SquadWeapons ButtonText_SquadWeapons; //offset = 284, size = 4
		ButtonText_CustomizeSquadWeapons ButtonText_CustomizeSquadWeapons; //offset = 288, size = 4
		ButtonText_CustomizeWeapons ButtonText_CustomizeWeapons; //offset = 292, size = 4
		ButtonText_Accept ButtonText_Accept; //offset = 296, size = 4
		ButtonText_Back ButtonText_Back; //offset = 300, size = 4
		WeaponMenuSubHeading WeaponMenuSubHeading; //offset = 304, size = 4
		LeftBracketToken LeftBracketToken; //offset = 308, size = 4
		RightBracketToken RightBracketToken; //offset = 312, size = 4
		WeaponClassTokenString WeaponClassTokenString; //offset = 316, size = 4
		ClassDescriptionTokenString ClassDescriptionTokenString; //offset = 320, size = 4
		PawnActiveWeaponsString PawnActiveWeaponsString; //offset = 324, size = 4
		ShepardNameString ShepardNameString; //offset = 328, size = 4
		SingleCustomToken SingleCustomToken; //offset = 332, size = 4
		WeaponDescriptionTokenString WeaponDescriptionTokenString; //offset = 336, size = 4
		WwiseEvent* WeaponEquipSound; //offset = 340, size = 4
		String ShepardImage; //offset = 344, size = 12
		Array<Class*> LoadoutWeapons; //offset = 356, size = 12
		Array<LoadoutWeaponInfo> SubMenuEnabledWeapons; //offset = 368, size = 12
		Int CurrentPawn; //offset = 380, size = 4
		Array<Name> AvailableHenchmen; //offset = 384, size = 12
		Array<Int> WeaponMenuEnabledWeaponIDs; //offset = 396, size = 12

		Bool Update( Float DeltaTime );
		void Activated( Int idx, BioGlobalVariableTable* VarTable, BioPlayerController* PC, SFXEngine* Engine, HenchmanInfoStruct HenchInfo );
		void Deactivated( BioPlayerController* PC, BioWorldInfo* WorldInfo );
		LoadoutInfo GetHenchmanLoadoutData( Name HenchClassName, LoadoutInfo HenchInfo );
		HenchmanInfoStruct GetHenchmanInfo( Name HenchClassName, HenchmanInfoStruct HenchInfo );
		void PrepareHenchmanRecords( Name Tag, Int HenchIdx, BioPlayerController* PC, SFXEngine* Engine, HenchmanSaveRecord SaveInfo );
		void BuildPawnWeaponList( Int PawnID, SFXChoiceEntry entry, SFXTokenMapping TokenMapping, Int idx, Int ListIndex, Class* WClass, BioPlayerController* PC, SFXEngine* Engine );
		void ShowCharacterMenu( SFXGameChoiceGUIData* Data, SFXChoiceEntry entry, Int idx, BioPlayerController* PC, BioGlobalVariableTable* VarTable, HenchmanInfoStruct HenchInfo );
		void CharacterMenuHandler( Bool bAPressed, Int nContext, BioPlayerController* PC, SFXEngine* Engine, Int idx );
		void PreparePlayerLoadout( Int idx, Class* WClass, BioPlayerController* PC, SFXEngine* Engine );
		void PrepareHenchmanLoadout( Int HenchIdx, Int idx, Class* WClass, BioPlayerController* PC, SFXEngine* Engine );
		Texture2D* FindImage( String Path, Texture2D* Image );
		void ShowWeaponsTopMenu( SFXGameChoiceGUIData* Data, SFXChoiceEntry entry, Int idx, BioPlayerController* PC, Class* WClass, SFXTokenMapping TokenMapping, Int WeaponClassUnlockCount );
		void TopMenuHandler( Bool bAPressed, Int nContext, BioPlayerController* PC, SFXEngine* Engine, Int idx, BioBaseSquad* Squad, BioPawn* SquadMember );
		void ApplyHenchmanLoadout( Int HenchIdx, BioPlayerController* PC, SFXEngine* Engine, Int idx );
		void ApplyPlayerLoadout( BioPlayerController* PC, SFXEngine* Engine, Int idx );
		Int GetWeaponClassUnlockedCount( Int GroupIdx, Int idx, BioGlobalVariableTable* VarTable, Array<LoadoutWeaponInfo> WeaponGroup, Int Count, Class* WClass );
		Bool CanPawnUseSpecialWeapon( Int PawnID, Class* WeaponClass );
		Bool CanPawnUseWeaponClass( Int PawnID, Byte WeaponGroupID );
		LoadoutInfo GetPlayerLoadoutData(, LoadoutInfo PlayerData, BioPlayerController* PlayerController, Int Index );
		void ShowWeaponSubMenu( Int GroupIdx, SFXGameChoiceGUIData* Data, SFXChoiceEntry entry, Class* WClass, Int idx, BioPlayerController* PC, BioGlobalVariableTable* VarTable, Array<LoadoutWeaponInfo> WeaponGroup, SFXTokenMapping TokenMapping, String WeaponPrettyName, Int WeaponGroupID, Int WeaponID );
		void SubMenuHandler( Bool bAPressed, Int nContext );
		void PlayEquipSound( BioPlayerController* PC );
	};

	class SFXSeqAct_ClearAreaMap: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ClearAreaMap, SequenceAction, SFXGame )

	public:

		void Activated( BioWorldInfo* oWorldInfo, MassEffectGuiManager* Manager );
	};

	class SFXSeqAct_CloseGalaxyMap: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_CloseGalaxyMap, SequenceAction, SFXGame )

	public:

		void Activated( BioSFPanel* oPanel, BioSFHandler_GalaxyMap* oHandler );
	};

	class SFXSeqAct_DefendActor: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_DefendActor, SequenceAction, SFXGame )

	public:

		Array<Pawn*> Henchmen; //offset = 240, size = 12
		Actor* ActorToDefend; //offset = 252, size = 4
		Float MaxDistanceFromActor; //offset = 256, size = 4

		void Activated( Pawn* oPawn, SFXAI_Henchman* oController, Int nIndex );
	};

	class SFXSeqAct_FollowActor: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_FollowActor, SequenceAction, SFXGame )

	public:

		Array<Pawn*> Pawns; //offset = 240, size = 12
		Actor* ActorToFollow; //offset = 252, size = 4

		void Activated( Pawn* oPawn, SFXAI_Core* oController, Int nPawnIndex );
	};

	class SFXSeqAct_ForceCombatOn: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ForceCombatOn, SequenceAction, SFXGame )

	public:

		void Activated( SFXGame* GameInfo );
	};

	class SFXSeqAct_GameCompleted: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_GameCompleted, SequenceAction, SFXGame )

	public:

		Int m_nEndID; //offset = 240, size = 4

		void Activated();
	};

	class SFXSeqAct_GenerateVocEvent: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_GenerateVocEvent, SequenceAction, SFXGame )

	public:

		Byte oEventID; //offset = 240, size = 1
		Actor* oInstigator; //offset = 244, size = 4
		BioPawn* oRecipient; //offset = 248, size = 4
		Float fDelay; //offset = 252, size = 4
		Float fChanceToPlayMod; //offset = 256, size = 4

		BioPawn* GetBioPawn( Actor* oTarget );
		void Activated( BioPawn* oPawnInstigator, BioPawn* oPawnRecipient );
	};

	class SFXSeqAct_GetCurrentGoal: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_GetCurrentGoal, SequenceAction, SFXGame )

	public:

		SFXNav_GoalPoint* oGoal; //offset = 240, size = 4
		Int nPriority; //offset = 244, size = 4

		void Activated( BioWorldInfo* oBWI, BioPlayerController* oBPC );
	};

	class SFXSeqAct_GetPropertyGeneric: public BioSeqAct_GetProperty
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_GetPropertyGeneric, BioSeqAct_GetProperty, SFXGame )

	public:
	};

	class SFXSeqAct_GetTreasureImage: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_GetTreasureImage, SequenceAction, SFXGame )

	public:

		Int nTreasureId; //offset = 240, size = 4
		Texture2D* oImage; //offset = 244, size = 4

		void Activated( String sImageResource, Int nID );
	};

	class SFXSeqAct_GivePlotWeapon: public SeqAct_Latent
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_GivePlotWeapon, SeqAct_Latent, SFXGame )

	public:

		Class* WeaponClass; //offset = 256, size = 4
		Bool bAutoEquip: 1; //offset = 260, size = 4
		Bool bShowPopup: 1; //offset = 260, size = 4
		Bool m_bFinished: 1; //offset = 260, size = 4
		Bool m_bWasPaused: 1; //offset = 260, size = 4
		srText srText; //offset = 264, size = 4
		srAButton srAButton; //offset = 268, size = 4
		srNoSquadMembers srNoSquadMembers; //offset = 272, size = 4
		ShepardName ShepardName; //offset = 276, size = 4
		srSquadListTokens srSquadListTokens; //offset = 280, size = 4
		Byte m_Skin; //offset = 284, size = 1
		Byte m_TextAlign; //offset = 285, size = 1

		void MessageInputPressed( Bool bAPressed, Int nContext );
		Bool Update( Float DeltaTime );
		String BuildSquadMemberList( Class* WClass, BioGlobalVariableTable* VarTable, Bool bWeaponIsUsed, Int TokenIndex, Int Index, HenchmanInfoStruct HenchInfo );
		void DisplayMessageBox( BioSFHandler_MessageBox* oMsgBox, BioMessageBoxOptionalParams stParams, String WeaponName, String SquadList );
		void Activated( SFXPawn* oPawn, SFXPawn* oPlayerPawn, Int idx, Int HIdx, Int GroupIdx, Int EntryIdx, SFXEngine* Engine );
	};

	class SFXSeqAct_InitMainMenu: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_InitMainMenu, SequenceAction, SFXGame )

	public:

		void Activated( SFXEngine* Engine, BioPlayerController* PC, LocalPlayer* LP, BioWorldInfo* oWorldInfo );
	};

	class SFXSeqAct_LegacyDataBasicInfo: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_LegacyDataBasicInfo, SequenceAction, SFXGame )

	public:

		SFXLegacyData* ImportDataManager; //offset = 240, size = 4
		BioWorldInfo* BWI; //offset = 244, size = 4
		String sFName; //offset = 248, size = 12
		String sLName; //offset = 260, size = 12
		Int nLvl; //offset = 272, size = 4
		String sClass; //offset = 276, size = 12
		String sRep; //offset = 288, size = 12
		String sOrgn; //offset = 300, size = 12
		Float fPgn; //offset = 312, size = 4
		Float fRng; //offset = 316, size = 4
		srSpacer srSpacer; //offset = 320, size = 4
		srColonist srColonist; //offset = 324, size = 4
		srEarthborn srEarthborn; //offset = 328, size = 4
		srSurvivor srSurvivor; //offset = 332, size = 4
		srWarHero srWarHero; //offset = 336, size = 4
		srRuthless srRuthless; //offset = 340, size = 4
		srSoldier srSoldier; //offset = 344, size = 4
		srEngineer srEngineer; //offset = 348, size = 4
		srAdept srAdept; //offset = 352, size = 4
		srInfiltrator srInfiltrator; //offset = 356, size = 4
		srVanguard srVanguard; //offset = 360, size = 4
		srSentinel srSentinel; //offset = 364, size = 4
		srShepard srShepard; //offset = 368, size = 4
		Float m_fTimeOut; //offset = 372, size = 4

		void Activated();
	};

	class SFXSeqAct_LinkLighting: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_LinkLighting, SequenceAction, SFXGame )

	public:

		Bool bLinkShadows: 1; //offset = 240, size = 4
		Bool bLinkEnvironment: 1; //offset = 240, size = 4

		void Activated( Int nChildIdx, MeshComponent* oCurComponent, Actor* oCurChild, Actor* oTargetActor, BioPawn* oTargetPawn, SkeletalMeshActor* oTargetSkelMesh, MeshComponent* oShadowParent, LightEnvironmentComponent* oLightEnvironment );
	};

	class SFXSeqAct_LinkToSaveBool: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_LinkToSaveBool, SequenceAction, SFXGame )

	public:

		Actor* oActor; //offset = 240, size = 4
		SeqVar_Bool* oTargetBool; //offset = 244, size = 4
		SeqVar_Bool* oCombatTargetBool; //offset = 248, size = 4

		void Activated();
	};

	class SFXSeqAct_ModifyPropertyGeneric: public BioSeqAct_ModifyProperty
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ModifyPropertyGeneric, BioSeqAct_ModifyProperty, SFXGame )

	public:
	};

	class SFXSeqAct_OpenMap: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_OpenMap, SequenceAction, SFXGame )

	public:

		String AreaName; //offset = 240, size = 12

		void Activated();
	};

	class SFXSeqAct_PreventDamage: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_PreventDamage, SequenceAction, SFXGame )

	public:

		Array<Actor*> Actors; //offset = 240, size = 12
		Bool PreventDamage: 1; //offset = 252, size = 4

		void Activated( Int nIndex, Actor* TheActor );
	};

	enum EResearchMode
	{
		MODE_RESEARCH_TOP,
		MODE_RESEARCH_WEAPON,
		MODE_RESEARCH_ARMOR,
	};

	enum eMode
	{
		MODE_TOPLEVEL,
		MODE_RESEARCH,
	};

	struct ResearchMenu
	{
		Int Index; //offset = 0, size = 4
		srTitle srTitle; //offset = 4, size = 4
		srSubtitle srSubtitle; //offset = 8, size = 4
		srAboutLabel srAboutLabel; //offset = 12, size = 4
		srAboutText srAboutText; //offset = 16, size = 4
		String sImagePath; //offset = 20, size = 12
		Array<TechData> m_ResearchChoices; //offset = 32, size = 12
	};

	class SFXSeqAct_ResearchChoiceGUI: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ResearchChoiceGUI, BioSequenceLatentAction, SFXGame )

	public:

		Bool m_bFinished: 1; //offset = 260, size = 4
		Bool m_bAborted: 1; //offset = 260, size = 4
		Bool m_bWasPaused: 1; //offset = 260, size = 4
		Bool bDidResearch: 1; //offset = 260, size = 4
		Bool m_bMessageBoxActivated: 1; //offset = 260, size = 4
		BioSFHandler_ChoiceGUI* m_ChoiceGUIHandler; //offset = 264, size = 4
		SFXGameChoiceGUIData_Research* m_ChoiceGUIData; //offset = 268, size = 4
		Array<TechData> m_TechChoices; //offset = 272, size = 12
		Array<TechData> m_ResearchChoices; //offset = 284, size = 12
		Array<TechData> m_ResearchSubMenuChoices; //offset = 296, size = 12
		Array<SFXChoiceEntry> m_TopLevelChoices; //offset = 308, size = 12
		Array<SFXChoiceEntry> m_TechTopChoices; //offset = 320, size = 12
		Array<SFXChoiceEntry> m_ResearchTopChoices; //offset = 332, size = 12
		TechData m_ChosenTechData; //offset = 344, size = 276
		BioSFHandler_MessageBox* m_oMsgBox; //offset = 620, size = 4
		srText srText; //offset = 624, size = 4
		srErrorAButton srErrorAButton; //offset = 628, size = 4
		srErrorCanNotAfford srErrorCanNotAfford; //offset = 632, size = 4
		srErrorDoNotQualify srErrorDoNotQualify; //offset = 636, size = 4
		srErrorKnown srErrorKnown; //offset = 640, size = 4
		srTechNameLabel srTechNameLabel; //offset = 644, size = 4
		srResearchConfirmMessage srResearchConfirmMessage; //offset = 648, size = 4
		srResearchConfirm srResearchConfirm; //offset = 652, size = 4
		srResearchCancel srResearchCancel; //offset = 656, size = 4
		srEezo srEezo; //offset = 660, size = 4
		srPlatinum srPlatinum; //offset = 664, size = 4
		srPalladium srPalladium; //offset = 668, size = 4
		srIridium srIridium; //offset = 672, size = 4
		Int nLastUnlockedResearch; //offset = 676, size = 4
		Int nLastUnlockedTech; //offset = 680, size = 4
		srResearchDescription srResearchDescription; //offset = 684, size = 4
		srResearchTokenizedDescriptionPlural srResearchTokenizedDescriptionPlural; //offset = 688, size = 4
		srResearchTokenizedDescriptionSingular srResearchTokenizedDescriptionSingular; //offset = 692, size = 4
		srResearchTokenizedDescriptionResources srResearchTokenizedDescriptionResources; //offset = 696, size = 4
		srUpgradeTokenizedDescription srUpgradeTokenizedDescription; //offset = 700, size = 4
		srTokenizedResearchCategory srTokenizedResearchCategory; //offset = 704, size = 4
		srTokenizedResearchCategoryCounter srTokenizedResearchCategoryCounter; //offset = 708, size = 4
		srTopLevelAButton srTopLevelAButton; //offset = 712, size = 4
		Byte Mode; //offset = 716, size = 1
		Byte RMode; //offset = 717, size = 1
		Byte InitialMode; //offset = 718, size = 1
		Byte InitialResearchMode; //offset = 719, size = 1
		Array<ResearchMenu> ResearchSubMenus; //offset = 720, size = 12

		void TopLevelChosen();
		void ExitChosen();
		void DoResearch( SFXPlotTreasure* oTreasure, BioPlayerController* oController );
		void TechChosen();
		void TechMenuChosen();
		void ResearchMenuChosen();
		void MessageInputPressed( Bool bAPressed, Int nContext );
		void MessageInputPressedResearch( Bool bAPressed, Int nContext );
		void MessageInputPressedError( Bool bAPressed, Int nContext );
		void ShowResearchMessageBox( STreasure stTreasure, STech stTech, BioMessageBoxOptionalParams stParams );
		void ShowErrorMessageBox( srError srError, BioMessageBoxOptionalParams stParams );
		void HandleInput_Research( Bool bAPressed, Int nContext, SFXPlotTreasure* oTreasure, STreasure stTreasure );
		void HandleInput_Tech( Bool bAPressed, Int nContext );
		void HandleInput_TopLevel( Bool bAPressed, Int nContext );
		void ExitGui();
		void ChoiceGUIInputPressed( Bool bAPressed, Int nContext );
		Bool UpdateOp( Float fDeltaT );
		void SetupTech( TechData TechData, SFXChoiceEntry Choice, Int nLevel, Int I, Int J, BioGlobalVariableTable* oGV, SFXPlotTreasure* oTreasure, STech stTech, Bool bInOrder, String sTechSmallImagePath, String sTechLargeImagePath );
		String GetResearchDescription( TechData ResearchData, String sQualifiesFor, String sCanAfford, String sDescription, Int nNewTechLevel );
		String GetResearchCanAffordString( TechData ResearchData, SFXPlotTreasure* oTreasure, STreasure stTreasure, Int nPlayerCash, Int nResearchCost, BioWorldInfo* oWorldInfo );
		String GetResearchQualifiesForString( TechData ResearchData, SFXPlotTreasure* oTreasure, STreasure stTreasure, STech stRequiredTech, Int nTechLevel, Int nRequiredTechLevel, String sDescription, Bool bQualifiesFor );
		String TokenizeResearchString( Int nLevel, srString srString );
		void SetupResearch( ResearchMenu Menu, TechData ResearchData, BioWorldInfo* oWorldInfo, SFXPlotTreasure* oTreasure, SFXChoiceEntry Choice, BioGlobalVariableTable* oGV, Int I, Int J, Int nTechLevel, Int nResearchLevel, Bool bInOrder, ResearchMenu TmpMenu, String sTmp, String sLargeImage );
		void TokenizeTechData( TechData Data, Int nLevel, SFXTokenMapping TokenMapping, BioWorldInfo* oWorldInfo );
		void SetupTop( SFXChoiceEntry Choice );
		void SetupChoiceGUI( TechData Data );
		Bool RenderModeResearch(, ResearchMenu Menu, Int idx );
		Bool RenderModeTech();
		Bool RenderModeTopLevel();
		void Reset( BioPlayerController* Controller, MassEffectGuiManager* Manager, BioWorldInfo* WorldInfo, Int idx, Bool bResult );
		void SetupTreasureData( SFXPlotTreasure* oTreasure, Int I );
		void Activated( BioPlayerController* PC, BioWorldInfo* WorldInfo );
		void Deactivated( BioPlayerController* PC, BioWorldInfo* WorldInfo );
	};

	class SFXSeqAct_SetDoorState: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetDoorState, BioSequenceLatentAction, SFXGame )

	public:

		SFXDoor* m_Door; //offset = 260, size = 4
		Bool m_bInstantTransition: 1; //offset = 264, size = 4

		Bool UpdateOp( Float fDeltaT );
		void SetDoorState( Byte ToState, Bool bEnableDoor );
		void Activated();
	};

	class SFXSeqAct_SetDoorType: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetDoorType, SequenceAction, SFXGame )

	public:

		Byte m_DoorType; //offset = 240, size = 1
		SFXDoor* m_Door; //offset = 244, size = 4

		void Activated();
	};

	class SFXSeqAct_SetGoalPriority: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetGoalPriority, SequenceAction, SFXGame )

	public:

		Object* m_oTarget; //offset = 240, size = 4
		SFXNav_GoalPoint* m_oGoal; //offset = 244, size = 4
		Int m_nSetPriority; //offset = 248, size = 4
		Bool m_bResetPriorityToDefault: 1; //offset = 252, size = 4

		void Activated();
	};

	class SFXSeqAct_SetPawnVocState: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetPawnVocState, SequenceAction, SFXGame )

	public:

		Bool bVocState: 1; //offset = 240, size = 4

		void Activated( BioPawn* oTargetPawn );
	};

	class SFXSeqAct_SetTargetable: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetTargetable, SequenceAction, SFXGame )

	public:

		Bool bTargetable: 1; //offset = 240, size = 4
		Bool bTargetableOverride: 1; //offset = 240, size = 4
		Bool bCombatTargetable: 1; //offset = 240, size = 4
		Bool bCombatTargetableOverride: 1; //offset = 240, size = 4

		void Activated( Int I, Actor* oActor );
		void ResetToDefault( Object* Instance, Bool bCombat, SFXModule* Module );
	};

	class SFXSeqAct_SetTargetTip: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetTargetTip, SequenceAction, SFXGame )

	public:

		srValue srValue; //offset = 240, size = 4

		void Activated( Int I, Actor* oActor );
	};

	class SFXSeqAct_SetTreasure: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetTreasure, SequenceAction, SFXGame )

	public:

		Bool bTargetable: 1; //offset = 240, size = 4
		Bool bOverrideResource: 1; //offset = 240, size = 4
		Bool bTreasureTypeOverride: 1; //offset = 240, size = 4
		Int ResourcePercent; //offset = 244, size = 4
		Byte TreasureType; //offset = 248, size = 1

		void Activated( Object* ChkObject, Actor* chkActor, SFXTreasureUseModule* TreasureMod );
	};

	class SFXSeqAct_SetWeaponVisibility: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_SetWeaponVisibility, SequenceAction, SFXGame )

	public:

		void Activated( Object* ChkObject, Pawn* ChkPawn, SFXWeapon* Weapon );
	};

	class SFXSeqAct_ShowCharacterRecordGUI: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ShowCharacterRecordGUI, BioSequenceLatentAction, SFXGame )

	public:

		Bool m_bIsFinished: 1; //offset = 260, size = 4

		void Deactivated( BioWorldInfo* oWorldInfo, BioPlayerController* oController, MassEffectGuiManager* oMgr, BioSFPanel* oPanel );
		void onScreenClosed();
		Bool UpdateOp( Float fDeltaT );
		void Activated( BioWorldInfo* oWorldInfo, BioPlayerController* oController, MassEffectGuiManager* oMgr, BioSFPanel* oNewPanel );
	};

	class SFXSeqAct_ShowOptionsGUI: public BioSequenceLatentAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ShowOptionsGUI, BioSequenceLatentAction, SFXGame )

	public:

		Bool m_bIsFinished: 1; //offset = 260, size = 4
		Byte OptionsGUIMode; //offset = 264, size = 1

		void Deactivated( BioWorldInfo* oWorldInfo, BioPlayerController* oController, MassEffectGuiManager* oMgr, BioSFPanel* oPanel );
		void onScreenClosed();
		Bool UpdateOp( Float fDeltaT );
		void Activated( BioWorldInfo* oWorldInfo, BioPlayerController* oController, MassEffectGuiManager* oMgr, BioSFPanel* oNewPanel, BioSFHandler_Options* oOptions );
	};

	class SFXSeqAct_ToggleAutoHints: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ToggleAutoHints, SequenceAction, SFXGame )

	public:

		void Activated( BioPlayerController* oPC );
	};

	class SFXSeqAct_TogglePowerWheelTutorial: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_TogglePowerWheelTutorial, SequenceAction, SFXGame )

	public:

		Byte ePowerTutorialType; //offset = 240, size = 1

		void Activated( BioPlayerController* PC );
	};

	class SFXSeqAct_ToggleSquadScreenMessages: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ToggleSquadScreenMessages, SequenceAction, SFXGame )

	public:

		void Activated( SFXGame* oGame );
	};

	class SFXSeqAct_ToggleTutorialEvents: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ToggleTutorialEvents, SequenceAction, SFXGame )

	public:

		void Activated( SFXGame* oGame );
	};

	class SFXSeqAct_ToggleWeaponWheelTutorial: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_ToggleWeaponWheelTutorial, SequenceAction, SFXGame )

	public:

		void Activated( BioPlayerController* PC );
	};

	class SFXSeqAct_UpdateN7Achievements: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_UpdateN7Achievements, SequenceAction, SFXGame )

	public:

		void Activated( BioPlayerController* PC );
	};

	class SFXSeqAct_UpdateTrainingVideoCount: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SFXSeqAct_UpdateTrainingVideoCount, SequenceAction, SFXGame )

	public:

		Int VideoWatched; //offset = 240, size = 4

		void Activated( BioPlayerController* PC, SFXProfileSettings* ProfileSettings, Int Setting, Int WatchedVideoAlready );
	};

	class SFXSeqCond_CheckEntitlement: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( SFXSeqCond_CheckEntitlement, SequenceCondition, SFXGame )

	public:

		String sEntitlementName; //offset = 216, size = 12
		String sEntitlementGroup; //offset = 228, size = 12

		void Activated( Bool bIsEntitled, SFXGame* SFXGame );
	};

	class SFXSeqCond_GetDifficulty: public SequenceCondition
	{
		DECLARE_PACKAGE_CLASS( SFXSeqCond_GetDifficulty, SequenceCondition, SFXGame )

	public:

		Actor* Player; //offset = 216, size = 4

		void Activated( PlayerController* PC, SFXPRI* PRI );
	};

	class SFXSFHandler_PCAreaMap: public SFXSFHandler_AreaMap
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PCAreaMap, SFXSFHandler_AreaMap, SFXGame )

	public:

		void OnPanelAdded();
	};

	class SFXSFHandler_PCEANetworking: public SFXSFHandler_EANetworking
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PCEANetworking, SFXSFHandler_EANetworking, SFXGame )

	public:

		void OnPanelAdded();
	};

	class SFXSFHandler_PCHUD: public SFXSFHandler_HUD
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PCHUD, SFXSFHandler_HUD, SFXGame )

	public:

		void SetTargetStatus( String sStatus, Bool bInteractive, Bool bInRange );
	};

	class SFXSFHandler_PCLoad: public SFXSFHandler_Load
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PCLoad, SFXSFHandler_Load, SFXGame )

	public:

		void OnPanelAdded();
	};

	class SFXSFHandler_PCPersonalization: public SFXSFHandler_Personalization
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PCPersonalization, SFXSFHandler_Personalization, SFXGame )

	public:

		Bool bRotationEnabled: 1; //offset = 232, size = 4

		void HandleInputEvent( Byte Event, Float fValue, ASParams stParam, Array<ASParams> lstParams );
		void Update( Float fDeltaT );
	};

	class SFXSFHandler_PCSave: public SFXSFHandler_Save
	{
		DECLARE_PACKAGE_CLASS( SFXSFHandler_PCSave, SFXSFHandler_Save, SFXGame )

	public:

		void OnPanelAdded();
	};

	class SFXShield_ArmoredDoor: public SFXShield_Armour
	{
		DECLARE_PACKAGE_CLASS( SFXShield_ArmoredDoor, SFXShield_Armour, SFXGame )

	public:
	};

	class SFXShield_Armour_Player: public SFXShield_Armour
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Armour_Player, SFXShield_Armour, SFXGame )

	public:

		Float DamageGateStartTime; //offset = 796, size = 4
		Float DamageGateInterval; //offset = 800, size = 4

		void ApplyDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser );
	};

	class SFXShield_Biotic_Player: public SFXShield_Biotic
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Biotic_Player, SFXShield_Biotic, SFXGame )

	public:

		Float DamageGateStartTime; //offset = 796, size = 4
		Float DamageGateInterval; //offset = 800, size = 4

		void ApplyDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser );
	};

	class SFXShield_Energy_Player: public SFXShield_Energy
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Energy_Player, SFXShield_Energy, SFXGame )

	public:

		Float DamageGateStartTime; //offset = 796, size = 4
		Float DamageGateInterval; //offset = 800, size = 4

		void ApplyDamage( Float Damage, TraceHitInfo HitInfo, Vector HitLocation, Vector Momentum, Class* DamageType, Controller* InstigatedBy, Actor* DamageCauser );
	};

	class SFXShield_GethEnergy: public SFXShield_Energy
	{
		DECLARE_PACKAGE_CLASS( SFXShield_GethEnergy, SFXShield_Energy, SFXGame )

	public:
	};

	class SFXShield_GethEnergy_Player: public SFXShield_Energy_Player
	{
		DECLARE_PACKAGE_CLASS( SFXShield_GethEnergy_Player, SFXShield_Energy_Player, SFXGame )

	public:

		void ScaleShields();
	};

	class SFXShield_Heavy: public SFXShield_Base
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Heavy, SFXShield_Base, SFXGame )

	public:
	};

	class SFXShield_HeavyHardened: public SFXShield_Heavy
	{
		DECLARE_PACKAGE_CLASS( SFXShield_HeavyHardened, SFXShield_Heavy, SFXGame )

	public:
	};

	class SFXShield_HeavyMech: public SFXShield_HeavyHardened
	{
		DECLARE_PACKAGE_CLASS( SFXShield_HeavyMech, SFXShield_HeavyHardened, SFXGame )

	public:
	};

	class SFXShield_Light: public SFXShield_Base
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Light, SFXShield_Base, SFXGame )

	public:
	};

	class SFXShield_LightHardened: public SFXShield_Light
	{
		DECLARE_PACKAGE_CLASS( SFXShield_LightHardened, SFXShield_Light, SFXGame )

	public:
	};

	class SFXShield_Medium: public SFXShield_Base
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Medium, SFXShield_Base, SFXGame )

	public:
	};

	class SFXShield_MediumHardened: public SFXShield_Medium
	{
		DECLARE_PACKAGE_CLASS( SFXShield_MediumHardened, SFXShield_Medium, SFXGame )

	public:
	};

	class SFXShield_OrganicArmour: public SFXShield_Armour
	{
		DECLARE_PACKAGE_CLASS( SFXShield_OrganicArmour, SFXShield_Armour, SFXGame )

	public:
	};

	class SFXShield_Player: public SFXShield_Base
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Player, SFXShield_Base, SFXGame )

	public:
	};

	class SFXShield_Praetorian: public SFXShield_HeavyHardened
	{
		DECLARE_PACKAGE_CLASS( SFXShield_Praetorian, SFXShield_HeavyHardened, SFXGame )

	public:
	};

	class SFXShield_ReaperArmour: public SFXShield_Armour
	{
		DECLARE_PACKAGE_CLASS( SFXShield_ReaperArmour, SFXShield_Armour, SFXGame )

	public:
	};

	class SFXShield_ScionArmour: public SFXShield_Armour
	{
		DECLARE_PACKAGE_CLASS( SFXShield_ScionArmour, SFXShield_Armour, SFXGame )

	public:
	};

	class SFXSignText: public Actor
	{
		DECLARE_PACKAGE_CLASS( SFXSignText, Actor, SFXGame )

	public:

		void PostBeginPlay();
	};

	class SFXTreasureUseModuleSaveObject: public BioBaseSaveObject
	{
		DECLARE_PACKAGE_CLASS( SFXTreasureUseModuleSaveObject, BioBaseSaveObject, SFXGame )

	public:

		Int ResourcePercent; //offset = 72, size = 4
		BioBaseSaveObject* Owner; //offset = 76, size = 4

		void LoadObject( Object* O, SFXTreasureUseModule* UseModule );
		void SaveObject( Object* O, SFXTreasureUseModule* UseModule );
	};

	class SFXUIDataStore_OnlinePlayerData: public UIDataStore_OnlinePlayerData
	{
		DECLARE_PACKAGE_CLASS( SFXUIDataStore_OnlinePlayerData, UIDataStore_OnlinePlayerData, SFXGame )

	public:
	};
}

#endif
